From e669c91547d358767781295f3e30f4deedf3f163 Mon Sep 17 00:00:00 2001 From: Frank Voorburg Date: Fri, 21 Oct 2016 22:29:25 +0000 Subject: [PATCH] Refs #123. - Upgraded the XMClib to 2.1.8 in the XMC4700 Relax Kit demo programs. git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@164 5dc33758-31d5-4daf-9ae8-b24bf3d40d73 --- .../Boot/bin/openblt_xmc4700.elf | Bin 890024 -> 893128 bytes .../Boot/bin/openblt_xmc4700.map | 2289 +++++++++++------ .../Boot/bin/openblt_xmc4700.srec | 610 +++-- .../Boot/ide/xmc4700.depend | 234 +- .../Boot/ide/xmc4700.ebp | 52 + .../Boot/ide/xmc4700.elay | 94 +- .../Boot/lib/XMC4700.h | 303 +-- .../Boot/lib/cmsis/cmsis_gcc.h | 566 ++-- .../Boot/lib/cmsis/core_cm4.h | 536 ++-- .../Boot/lib/cmsis/core_cmFunc.h | 43 +- .../Boot/lib/cmsis/core_cmInstr.h | 41 +- .../Boot/lib/cmsis/core_cmSimd.h | 46 +- .../Boot/lib/system_XMC4700.c | 128 +- .../Boot/lib/system_XMC4700.h | 65 +- .../Boot/lib/xmclib/inc/xmc4_ccu4_map.h | 110 +- .../Boot/lib/xmclib/inc/xmc4_ccu8_map.h | 60 +- .../Boot/lib/xmclib/inc/xmc4_eru_map.h | 97 +- .../Boot/lib/xmclib/inc/xmc4_flash.h | 29 +- .../Boot/lib/xmclib/inc/xmc4_gpio.h | 6 +- .../Boot/lib/xmclib/inc/xmc4_gpio_map.h | 1231 ++++++--- .../Boot/lib/xmclib/inc/xmc4_rtc.h | 6 +- .../Boot/lib/xmclib/inc/xmc4_scu.h | 987 ++++++- .../Boot/lib/xmclib/inc/xmc4_usic_map.h | 95 +- .../Boot/lib/xmclib/inc/xmc_acmp.h | 424 +++ .../Boot/lib/xmclib/inc/xmc_bccu.h | 1976 ++++++++++++++ .../Boot/lib/xmclib/inc/xmc_can.h | 31 +- .../Boot/lib/xmclib/inc/xmc_can_map.h | 22 +- .../Boot/lib/xmclib/inc/xmc_ccu4.h | 38 +- .../Boot/lib/xmclib/inc/xmc_ccu8.h | 36 +- .../Boot/lib/xmclib/inc/xmc_common.h | 72 +- .../Boot/lib/xmclib/inc/xmc_dac.h | 6 +- .../Boot/lib/xmclib/inc/xmc_device.h | 201 +- .../Boot/lib/xmclib/inc/xmc_dma.h | 6 +- .../Boot/lib/xmclib/inc/xmc_dma_map.h | 6 +- .../Boot/lib/xmclib/inc/xmc_dsd.h | 6 +- .../Boot/lib/xmclib/inc/xmc_ebu.h | 24 +- .../Boot/lib/xmclib/inc/xmc_ecat.h | 462 ++++ .../Boot/lib/xmclib/inc/xmc_ecat_map.h | 287 +++ .../Boot/lib/xmclib/inc/xmc_eru.h | 23 +- .../Boot/lib/xmclib/inc/xmc_eth_mac.h | 129 +- .../Boot/lib/xmclib/inc/xmc_eth_mac_map.h | 6 +- .../Boot/lib/xmclib/inc/xmc_eth_phy.h | 52 +- .../Boot/lib/xmclib/inc/xmc_fce.h | 6 +- .../Boot/lib/xmclib/inc/xmc_flash.h | 10 +- .../Boot/lib/xmclib/inc/xmc_gpio.h | 6 +- .../Boot/lib/xmclib/inc/xmc_hrpwm.h | 6 +- .../Boot/lib/xmclib/inc/xmc_hrpwm_map.h | 6 +- .../Boot/lib/xmclib/inc/xmc_i2c.h | 74 +- .../Boot/lib/xmclib/inc/xmc_i2s.h | 84 +- .../Boot/lib/xmclib/inc/xmc_ledts.h | 6 +- .../Boot/lib/xmclib/inc/xmc_math.h | 1088 ++++++++ .../Boot/lib/xmclib/inc/xmc_pau.h | 396 +++ .../Boot/lib/xmclib/inc/xmc_posif.h | 20 +- .../Boot/lib/xmclib/inc/xmc_prng.h | 285 ++ .../Boot/lib/xmclib/inc/xmc_rtc.h | 44 +- .../Boot/lib/xmclib/inc/xmc_scu.h | 20 +- .../Boot/lib/xmclib/inc/xmc_sdmmc.h | 149 +- .../Boot/lib/xmclib/inc/xmc_spi.h | 100 +- .../Boot/lib/xmclib/inc/xmc_uart.h | 47 +- .../Boot/lib/xmclib/inc/xmc_usbd.h | 6 +- .../Boot/lib/xmclib/inc/xmc_usbd_regs.h | 6 +- .../Boot/lib/xmclib/inc/xmc_usbh.h | 416 +++ .../Boot/lib/xmclib/inc/xmc_usic.h | 46 +- .../Boot/lib/xmclib/inc/xmc_vadc.h | 418 ++- .../Boot/lib/xmclib/inc/xmc_vadc_map.h | 370 +-- .../Boot/lib/xmclib/inc/xmc_wdt.h | 6 +- .../Boot/lib/xmclib/src/xmc4_eru.c | 6 +- .../Boot/lib/xmclib/src/xmc4_flash.c | 113 +- .../Boot/lib/xmclib/src/xmc4_gpio.c | 6 +- .../Boot/lib/xmclib/src/xmc4_rtc.c | 11 +- .../Boot/lib/xmclib/src/xmc4_scu.c | 621 ++++- .../Boot/lib/xmclib/src/xmc_acmp.c | 119 + .../Boot/lib/xmclib/src/xmc_bccu.c | 577 +++++ .../Boot/lib/xmclib/src/xmc_can.c | 27 +- .../Boot/lib/xmclib/src/xmc_ccu4.c | 6 +- .../Boot/lib/xmclib/src/xmc_ccu8.c | 6 +- .../Boot/lib/xmclib/src/xmc_common.c | 8 +- .../Boot/lib/xmclib/src/xmc_dac.c | 6 +- .../Boot/lib/xmclib/src/xmc_dma.c | 65 +- .../Boot/lib/xmclib/src/xmc_dsd.c | 6 +- .../Boot/lib/xmclib/src/xmc_ebu.c | 6 +- .../Boot/lib/xmclib/src/xmc_ecat.c | 198 ++ .../Boot/lib/xmclib/src/xmc_eru.c | 17 +- .../Boot/lib/xmclib/src/xmc_eth_mac.c | 120 +- .../Boot/lib/xmclib/src/xmc_fce.c | 6 +- .../Boot/lib/xmclib/src/xmc_gpio.c | 6 +- .../Boot/lib/xmclib/src/xmc_hrpwm.c | 6 +- .../Boot/lib/xmclib/src/xmc_i2c.c | 6 +- .../Boot/lib/xmclib/src/xmc_i2s.c | 38 +- .../Boot/lib/xmclib/src/xmc_ledts.c | 6 +- .../Boot/lib/xmclib/src/xmc_math.c | 463 ++++ .../Boot/lib/xmclib/src/xmc_pau.c | 109 + .../Boot/lib/xmclib/src/xmc_posif.c | 6 +- .../Boot/lib/xmclib/src/xmc_prng.c | 107 + .../Boot/lib/xmclib/src/xmc_rtc.c | 47 +- .../Boot/lib/xmclib/src/xmc_sdmmc.c | 22 +- .../Boot/lib/xmclib/src/xmc_spi.c | 13 +- .../Boot/lib/xmclib/src/xmc_uart.c | 32 +- .../Boot/lib/xmclib/src/xmc_usbd.c | 6 +- .../Boot/lib/xmclib/src/xmc_usbh.c | 1487 +++++++++++ .../Boot/lib/xmclib/src/xmc_usic.c | 6 +- .../Boot/lib/xmclib/src/xmc_vadc.c | 157 +- .../Boot/lib/xmclib/src/xmc_wdt.c | 6 +- .../Prog/bin/demoprog_xmc4700.elf | Bin 769424 -> 772252 bytes .../Prog/bin/demoprog_xmc4700.map | 1845 ++++++++----- .../Prog/bin/demoprog_xmc4700.srec | 334 ++- .../Prog/ide/xmc4700.ebp | 52 + .../Prog/ide/xmc4700.elay | 49 +- .../Prog/lib/XMC4700.h | 303 +-- .../Prog/lib/cmsis/cmsis_gcc.h | 566 ++-- .../Prog/lib/cmsis/core_cm4.h | 536 ++-- .../Prog/lib/cmsis/core_cmFunc.h | 43 +- .../Prog/lib/cmsis/core_cmInstr.h | 41 +- .../Prog/lib/cmsis/core_cmSimd.h | 46 +- .../Prog/lib/system_XMC4700.c | 128 +- .../Prog/lib/system_XMC4700.h | 65 +- .../Prog/lib/xmclib/inc/xmc4_ccu4_map.h | 110 +- .../Prog/lib/xmclib/inc/xmc4_ccu8_map.h | 60 +- .../Prog/lib/xmclib/inc/xmc4_eru_map.h | 97 +- .../Prog/lib/xmclib/inc/xmc4_flash.h | 29 +- .../Prog/lib/xmclib/inc/xmc4_gpio.h | 6 +- .../Prog/lib/xmclib/inc/xmc4_gpio_map.h | 1231 ++++++--- .../Prog/lib/xmclib/inc/xmc4_rtc.h | 6 +- .../Prog/lib/xmclib/inc/xmc4_scu.h | 987 ++++++- .../Prog/lib/xmclib/inc/xmc4_usic_map.h | 95 +- .../Prog/lib/xmclib/inc/xmc_acmp.h | 424 +++ .../Prog/lib/xmclib/inc/xmc_bccu.h | 1976 ++++++++++++++ .../Prog/lib/xmclib/inc/xmc_can.h | 31 +- .../Prog/lib/xmclib/inc/xmc_can_map.h | 22 +- .../Prog/lib/xmclib/inc/xmc_ccu4.h | 38 +- .../Prog/lib/xmclib/inc/xmc_ccu8.h | 36 +- .../Prog/lib/xmclib/inc/xmc_common.h | 72 +- .../Prog/lib/xmclib/inc/xmc_dac.h | 6 +- .../Prog/lib/xmclib/inc/xmc_device.h | 201 +- .../Prog/lib/xmclib/inc/xmc_dma.h | 6 +- .../Prog/lib/xmclib/inc/xmc_dma_map.h | 6 +- .../Prog/lib/xmclib/inc/xmc_dsd.h | 6 +- .../Prog/lib/xmclib/inc/xmc_ebu.h | 24 +- .../Prog/lib/xmclib/inc/xmc_ecat.h | 462 ++++ .../Prog/lib/xmclib/inc/xmc_ecat_map.h | 287 +++ .../Prog/lib/xmclib/inc/xmc_eru.h | 23 +- .../Prog/lib/xmclib/inc/xmc_eth_mac.h | 129 +- .../Prog/lib/xmclib/inc/xmc_eth_mac_map.h | 6 +- .../Prog/lib/xmclib/inc/xmc_eth_phy.h | 52 +- .../Prog/lib/xmclib/inc/xmc_fce.h | 6 +- .../Prog/lib/xmclib/inc/xmc_flash.h | 10 +- .../Prog/lib/xmclib/inc/xmc_gpio.h | 6 +- .../Prog/lib/xmclib/inc/xmc_hrpwm.h | 6 +- .../Prog/lib/xmclib/inc/xmc_hrpwm_map.h | 6 +- .../Prog/lib/xmclib/inc/xmc_i2c.h | 74 +- .../Prog/lib/xmclib/inc/xmc_i2s.h | 84 +- .../Prog/lib/xmclib/inc/xmc_ledts.h | 6 +- .../Prog/lib/xmclib/inc/xmc_math.h | 1088 ++++++++ .../Prog/lib/xmclib/inc/xmc_pau.h | 396 +++ .../Prog/lib/xmclib/inc/xmc_posif.h | 20 +- .../Prog/lib/xmclib/inc/xmc_prng.h | 285 ++ .../Prog/lib/xmclib/inc/xmc_rtc.h | 44 +- .../Prog/lib/xmclib/inc/xmc_scu.h | 20 +- .../Prog/lib/xmclib/inc/xmc_sdmmc.h | 149 +- .../Prog/lib/xmclib/inc/xmc_spi.h | 100 +- .../Prog/lib/xmclib/inc/xmc_uart.h | 47 +- .../Prog/lib/xmclib/inc/xmc_usbd.h | 6 +- .../Prog/lib/xmclib/inc/xmc_usbd_regs.h | 6 +- .../Prog/lib/xmclib/inc/xmc_usbh.h | 416 +++ .../Prog/lib/xmclib/inc/xmc_usic.h | 46 +- .../Prog/lib/xmclib/inc/xmc_vadc.h | 418 ++- .../Prog/lib/xmclib/inc/xmc_vadc_map.h | 370 +-- .../Prog/lib/xmclib/inc/xmc_wdt.h | 6 +- .../Prog/lib/xmclib/src/xmc4_eru.c | 6 +- .../Prog/lib/xmclib/src/xmc4_flash.c | 113 +- .../Prog/lib/xmclib/src/xmc4_gpio.c | 6 +- .../Prog/lib/xmclib/src/xmc4_rtc.c | 11 +- .../Prog/lib/xmclib/src/xmc4_scu.c | 621 ++++- .../Prog/lib/xmclib/src/xmc_acmp.c | 119 + .../Prog/lib/xmclib/src/xmc_bccu.c | 577 +++++ .../Prog/lib/xmclib/src/xmc_can.c | 27 +- .../Prog/lib/xmclib/src/xmc_ccu4.c | 6 +- .../Prog/lib/xmclib/src/xmc_ccu8.c | 6 +- .../Prog/lib/xmclib/src/xmc_common.c | 8 +- .../Prog/lib/xmclib/src/xmc_dac.c | 6 +- .../Prog/lib/xmclib/src/xmc_dma.c | 65 +- .../Prog/lib/xmclib/src/xmc_dsd.c | 6 +- .../Prog/lib/xmclib/src/xmc_ebu.c | 6 +- .../Prog/lib/xmclib/src/xmc_ecat.c | 198 ++ .../Prog/lib/xmclib/src/xmc_eru.c | 17 +- .../Prog/lib/xmclib/src/xmc_eth_mac.c | 120 +- .../Prog/lib/xmclib/src/xmc_fce.c | 6 +- .../Prog/lib/xmclib/src/xmc_gpio.c | 6 +- .../Prog/lib/xmclib/src/xmc_hrpwm.c | 6 +- .../Prog/lib/xmclib/src/xmc_i2c.c | 6 +- .../Prog/lib/xmclib/src/xmc_i2s.c | 38 +- .../Prog/lib/xmclib/src/xmc_ledts.c | 6 +- .../Prog/lib/xmclib/src/xmc_math.c | 463 ++++ .../Prog/lib/xmclib/src/xmc_pau.c | 109 + .../Prog/lib/xmclib/src/xmc_posif.c | 6 +- .../Prog/lib/xmclib/src/xmc_prng.c | 107 + .../Prog/lib/xmclib/src/xmc_rtc.c | 47 +- .../Prog/lib/xmclib/src/xmc_sdmmc.c | 22 +- .../Prog/lib/xmclib/src/xmc_spi.c | 13 +- .../Prog/lib/xmclib/src/xmc_uart.c | 32 +- .../Prog/lib/xmclib/src/xmc_usbd.c | 6 +- .../Prog/lib/xmclib/src/xmc_usbh.c | 1487 +++++++++++ .../Prog/lib/xmclib/src/xmc_usic.c | 6 +- .../Prog/lib/xmclib/src/xmc_vadc.c | 157 +- .../Prog/lib/xmclib/src/xmc_wdt.c | 6 +- 205 files changed, 31428 insertions(+), 6567 deletions(-) create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_acmp.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_bccu.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ecat.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ecat_map.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_math.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_pau.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_prng.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usbh.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_acmp.c create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_bccu.c create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ecat.c create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_math.c create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_pau.c create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_prng.c create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_usbh.c create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/inc/xmc_acmp.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/inc/xmc_bccu.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/inc/xmc_ecat.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/inc/xmc_ecat_map.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/inc/xmc_math.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/inc/xmc_pau.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/inc/xmc_prng.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/inc/xmc_usbh.h create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/src/xmc_acmp.c create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/src/xmc_bccu.c create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/src/xmc_ecat.c create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/src/xmc_math.c create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/src/xmc_pau.c create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/src/xmc_prng.c create mode 100644 Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/lib/xmclib/src/xmc_usbh.c diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/bin/openblt_xmc4700.elf b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/bin/openblt_xmc4700.elf index 74697a4a3602fef5a896d0c741bc3417d6103949..ebdea43f72a8b8f58e6123f2b1baed7110eb9ef4 100644 GIT binary patch delta 174182 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�Q=d@8}~>-=`ox_UyS5?sGjwU-0rgGmmood+I5E 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

JfCif;<8ff3!g_O6f?hS9AVMrX9P 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 PMAbM{xcq^r_w#=NLsl0c diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/bin/openblt_xmc4700.map b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/bin/openblt_xmc4700.map index a8407af5..e8158041 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/bin/openblt_xmc4700.map +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/bin/openblt_xmc4700.map @@ -18,9 +18,11 @@ Common symbol size file dma0_event_handlers 0x20 ..\obj\lib\xmclib\src\xmc_dma.o +pipe 0x1c0 ..\obj\lib\xmclib\src\xmc_usbh.o dma1_event_handlers 0x10 ..\obj\lib\xmclib\src\xmc_dma.o event_handler_list 0x80 ..\obj\lib\xmclib\src\xmc4_scu.o +is_nack 0xe ..\obj\lib\xmclib\src\xmc_usbh.o usbd_init 0x4 ..\obj\lib\xmclib\src\xmc_usbd.o xmc_device 0x208 ..\obj\lib\xmclib\src\xmc_usbd.o @@ -147,17 +149,17 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\led.o .debug_macro 0x00000000 0x10 ..\obj\led.o .debug_macro 0x00000000 0x35 ..\obj\led.o - .debug_macro 0x00000000 0x162 ..\obj\led.o + .debug_macro 0x00000000 0x16e ..\obj\led.o .debug_macro 0x00000000 0x2d ..\obj\led.o .debug_macro 0x00000000 0x3b ..\obj\led.o .debug_macro 0x00000000 0x50 ..\obj\led.o .debug_macro 0x00000000 0xe66 ..\obj\led.o .debug_macro 0x00000000 0x16 ..\obj\led.o - .debug_macro 0x00000000 0x166f2 ..\obj\led.o - .debug_macro 0x00000000 0x12 ..\obj\led.o + .debug_macro 0x00000000 0x165d5 ..\obj\led.o + .debug_macro 0x00000000 0x19 ..\obj\led.o .debug_macro 0x00000000 0x4c ..\obj\led.o .debug_macro 0x00000000 0x22 ..\obj\led.o - .debug_macro 0x00000000 0xd4d ..\obj\led.o + .debug_macro 0x00000000 0xdc4 ..\obj\led.o .debug_macro 0x00000000 0xba ..\obj\led.o .group 0x00000000 0x8 ..\obj\lib\system_xmc4700.o .group 0x00000000 0x8 ..\obj\lib\system_xmc4700.o @@ -207,7 +209,7 @@ Discarded input sections .debug_macro 0x00000000 0x50 ..\obj\lib\system_xmc4700.o .debug_macro 0x00000000 0xe66 ..\obj\lib\system_xmc4700.o .debug_macro 0x00000000 0x16 ..\obj\lib\system_xmc4700.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\system_xmc4700.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\system_xmc4700.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc4_eru.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc4_eru.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc4_eru.o @@ -283,14 +285,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc4_eru.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc4_eru.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc4_eru.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc4_eru.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc4_eru.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc4_eru.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_eru.o @@ -303,9 +305,9 @@ Discarded input sections .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x2a1 ..\obj\lib\xmclib\src\xmc4_eru.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc4_eru.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_line 0x00000000 0x45b ..\obj\lib\xmclib\src\xmc4_eru.o - .debug_str 0x00000000 0x778d2 ..\obj\lib\xmclib\src\xmc4_eru.o + .debug_str 0x00000000 0x7730b ..\obj\lib\xmclib\src\xmc4_eru.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc4_eru.o .debug_frame 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc4_eru.o .ARM.attributes @@ -369,21 +371,21 @@ Discarded input sections .text.XMC_FLASH_lRepairPhysicalSectorCommand 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_ErasePhysicalSector - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_RepairPhysicalSector 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_EraseUCB - 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_Reset 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_InstallProtection - 0x00000000 0x60 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x00000000 0x70 ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_ConfirmProtection - 0x00000000 0x54 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x00000000 0x64 ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_VerifyReadProtection - 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_VerifyWriteProtection - 0x00000000 0x58 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x00000000 0x6c ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_ResumeProtection 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_flash.o .rodata.str1.4 @@ -408,14 +410,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_flash.o @@ -492,14 +494,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_gpio.o @@ -511,7 +513,7 @@ Discarded input sections .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_macro 0x00000000 0xd4d ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_macro 0x00000000 0xdc4 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0xba ..\obj\lib\xmclib\src\xmc4_gpio.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc4_rtc.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc4_rtc.o @@ -579,10 +581,10 @@ Discarded input sections .text.XMC_RTC_DisableEvent 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_rtc.o .text.XMC_RTC_ClearEvent - 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_info 0x00000000 0x6f6 ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_abbrev 0x00000000 0x1da ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_loc 0x00000000 0x9a ..\obj\lib\xmclib\src\xmc4_rtc.o + 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_info 0x00000000 0x6f4 ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_abbrev 0x00000000 0x1e9 ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_loc 0x00000000 0x79 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_aranges 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_ranges 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc4_rtc.o @@ -607,14 +609,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_rtc.o @@ -636,9 +638,9 @@ Discarded input sections .debug_macro 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0xd7 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_line 0x00000000 0x5d1 ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_str 0x00000000 0x76d0a ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_str 0x00000000 0x76743 ..\obj\lib\xmclib\src\xmc4_rtc.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_frame 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc4_rtc.o .ARM.attributes @@ -696,7 +698,7 @@ Discarded input sections .text.XMC_SCU_INTERUPT_GetEventStatus 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_INTERRUPT_ClearEventStatus - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_GetBootMode 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_SetBootMode @@ -706,9 +708,9 @@ Discarded input sections .text.XMC_SCU_WriteGPR 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_EnableOutOfRangeComparator - 0x00000000 0x3c ..\obj\lib\xmclib\src\xmc4_scu.o - .text.XMC_SCU_DisableOutOfRangeComparator 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_DisableOutOfRangeComparator + 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CalibrateTemperatureSensor 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_EnableTemperatureSensor @@ -719,7 +721,7 @@ Discarded input sections 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_IsTemperatureSensorReady 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o - .text.XMC_SCU_GetTemperature + .text.XMC_SCU_GetTemperatureMeasurement 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_IsTemperatureSensorBusy 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o @@ -728,7 +730,7 @@ Discarded input sections .text.XMC_SCU_WriteToRetentionMemory 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_ReadFromRetentionMemory - 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_TRAP_Enable 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_TRAP_Disable @@ -736,9 +738,9 @@ Discarded input sections .text.XMC_SCU_TRAP_GetStatus 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_TRAP_Trigger - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_TRAP_ClearStatus - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_PARITY_ClearStatus 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_PARITY_GetStatus @@ -758,7 +760,7 @@ Discarded input sections .text.XMC_SCU_RESET_AssertPeripheralReset 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_RESET_IsPeripheralResetAsserted - 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_GetSystemPllClockSourceFrequency 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_GetSystemPllClockFrequency @@ -814,7 +816,11 @@ Discarded input sections .text.XMC_SCU_CLOCK_GatePeripheralClock 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_IsPeripheralClockGated - 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_POWER_GetEVR13Voltage + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_POWER_GetEVR33Voltage + 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_EnableUsbPll 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_DisableUsbPll @@ -826,29 +832,67 @@ Discarded input sections .text.XMC_SCU_CLOCK_SetBackupClockCalibrationMode 0x00000000 0x34 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_POWER_EnableUsb - 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_POWER_DisableUsb - 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_IsUsbPllLocked 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_HIB_EnableHibernateDomain - 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_HIB_DisableHibernateDomain - 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_HIB_IsHibernateDomainEnabled 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_HIB_EnableInternalSlowClock 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_HIB_DisableInternalSlowClock 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_ClearEventStatus + 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_TriggerEvent + 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_EnableEvent + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_DisableEvent + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_EnterHibernateState + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_EnterHibernateStateEx + 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_SetWakeupTriggerInput + 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_SetPinMode + 0x00000000 0x34 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_SetPinOutputLevel + 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_SetInput0 + 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_SetSR0Input + 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_IsLowPowerOscillatorStable + 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_EnableLowPowerOscillator - 0x00000000 0x5c ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x48 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_DisableLowPowerOscillator 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_EnableLowPowerOscillatorGeneralPurposeInput + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_DisableLowPowerOscillatorGeneralPurposeInput + 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_GetLowPowerOscillatorGeneralPurposeInputStatus + 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_EnableHighPerformanceOscillator - 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_IsHighPerformanceOscillatorStable + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_DisableHighPerformanceOscillator 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_EnableHighPerformanceOscillatorGeneralPurposeInput + 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_DisableHighPerformanceOscillatorGeneralPurposeInput + 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_GetHighPerformanceOscillatorGeneralPurposeInputStatus + 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_EnableSystemPll 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_DisableSystemPll @@ -858,25 +902,17 @@ Discarded input sections .text.XMC_SCU_CLOCK_StepSystemPllFrequency 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_StartSystemPll - 0x00000000 0x124 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x10c ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_Init - 0x00000000 0x14c ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x15c ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_IsSystemPllLocked 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_INTERRUPT_SetEventHandler 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_IRQHandler 0x00000000 0x34 ..\obj\lib\xmclib\src\xmc4_scu.o - .rodata.clear_peripheral_gate.7785 - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o - .rodata.clear_peripheral_reset.7664 - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .rodata.str1.4 0x00000000 0x1d ..\obj\lib\xmclib\src\xmc4_scu.o - .rodata.set_peripheral_gate.7773 - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o - .rodata.set_peripheral_reset.7652 - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc4_scu.o @@ -897,14 +933,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_scu.o @@ -915,8 +951,186 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc4_scu.o COMMON 0x00000000 0x80 ..\obj\lib\xmclib\src\xmc4_scu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .text 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_acmp.o + .data 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_acmp.o + .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_info 0x00000000 0xa4 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_abbrev 0x00000000 0x4e ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_aranges + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x21c ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x87 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0xfd ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x5e ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x1df ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x1f ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x43 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x65 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_line 0x00000000 0x40a ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_str 0x00000000 0x753d1 ..\obj\lib\xmclib\src\xmc_acmp.o + .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_acmp.o + .ARM.attributes + 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .text 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_bccu.o + .data 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_bccu.o + .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_info 0x00000000 0xa4 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_abbrev 0x00000000 0x4e ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_aranges + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x21c ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x87 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0xfd ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x5e ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x1df ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x1f ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x43 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x65 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_line 0x00000000 0x40a ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_str 0x00000000 0x753d1 ..\obj\lib\xmclib\src\xmc_bccu.o + .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_bccu.o + .ARM.attributes + 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_bccu.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_can.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_can.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_can.o @@ -988,7 +1202,7 @@ Discarded input sections .text.XMC_CAN_MO_UpdateData 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc_can.o .text.XMC_CAN_MO_Config - 0x00000000 0x88 ..\obj\lib\xmclib\src\xmc_can.o + 0x00000000 0x94 ..\obj\lib\xmclib\src\xmc_can.o .text.XMC_CAN_MO_Transmit 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc_can.o .text.XMC_CAN_MO_ReceiveData @@ -1011,9 +1225,9 @@ Discarded input sections 0x00000000 0x5c ..\obj\lib\xmclib\src\xmc_can.o .rodata.str1.4 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_can.o - .debug_info 0x00000000 0x13f7 ..\obj\lib\xmclib\src\xmc_can.o - .debug_abbrev 0x00000000 0x3a3 ..\obj\lib\xmclib\src\xmc_can.o - .debug_loc 0x00000000 0xcfa ..\obj\lib\xmclib\src\xmc_can.o + .debug_info 0x00000000 0x1448 ..\obj\lib\xmclib\src\xmc_can.o + .debug_abbrev 0x00000000 0x3a4 ..\obj\lib\xmclib\src\xmc_can.o + .debug_loc 0x00000000 0xd21 ..\obj\lib\xmclib\src\xmc_can.o .debug_aranges 0x00000000 0xd8 ..\obj\lib\xmclib\src\xmc_can.o .debug_ranges 0x00000000 0xe0 ..\obj\lib\xmclib\src\xmc_can.o @@ -1038,14 +1252,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_can.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_can.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_can.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_can.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_can.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_can.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_can.o @@ -1056,11 +1270,11 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_can.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_can.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x70a ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_can.o - .debug_line 0x00000000 0x77d ..\obj\lib\xmclib\src\xmc_can.o - .debug_str 0x00000000 0x7a27b ..\obj\lib\xmclib\src\xmc_can.o + .debug_line 0x00000000 0x788 ..\obj\lib\xmclib\src\xmc_can.o + .debug_str 0x00000000 0x79cd0 ..\obj\lib\xmclib\src\xmc_can.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_can.o .debug_frame 0x00000000 0x20c ..\obj\lib\xmclib\src\xmc_can.o .ARM.attributes @@ -1197,14 +1411,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_ccu4.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_ccu4.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_ccu4.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_ccu4.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_ccu4.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_ccu4.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_ccu4.o @@ -1216,9 +1430,9 @@ Discarded input sections .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x740 ..\obj\lib\xmclib\src\xmc_ccu4.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_ccu4.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_line 0x00000000 0xc42 ..\obj\lib\xmclib\src\xmc_ccu4.o - .debug_str 0x00000000 0x79ba7 ..\obj\lib\xmclib\src\xmc_ccu4.o + .debug_str 0x00000000 0x795e0 ..\obj\lib\xmclib\src\xmc_ccu4.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_frame 0x00000000 0x358 ..\obj\lib\xmclib\src\xmc_ccu4.o .ARM.attributes @@ -1276,9 +1490,9 @@ Discarded input sections .text.XMC_CCU8_SetModuleClock 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_ccu8.o .text.XMC_CCU8_SLICE_CompareInit - 0x00000000 0x1a0 ..\obj\lib\xmclib\src\xmc_ccu8.o + 0x00000000 0x19c ..\obj\lib\xmclib\src\xmc_ccu8.o .text.XMC_CCU8_SLICE_CaptureInit - 0x00000000 0x18c ..\obj\lib\xmclib\src\xmc_ccu8.o + 0x00000000 0x188 ..\obj\lib\xmclib\src\xmc_ccu8.o .text.XMC_CCU8_SLICE_SetOutPath 0x00000000 0xc8 ..\obj\lib\xmclib\src\xmc_ccu8.o .text.XMC_CCU8_SetMultiChannelShadowTransferMode @@ -1323,8 +1537,8 @@ Discarded input sections 0x00000000 0xd4 ..\obj\lib\xmclib\src\xmc_ccu8.o .text.XMC_CCU8_SLICE_GetLastCapturedTimerValue 0x00000000 0x114 ..\obj\lib\xmclib\src\xmc_ccu8.o - .text.XMC_CCU8_GetCapturedValueFromFifo - 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_ccu8.o + .text.XMC_CCU8_SLICE_GetCapturedValueFromFifo + 0x00000000 0xd8 ..\obj\lib\xmclib\src\xmc_ccu8.o .text.XMC_CCU8_SLICE_EnableDithering 0x00000000 0x184 ..\obj\lib\xmclib\src\xmc_ccu8.o .text.XMC_CCU8_SLICE_SetPrescaler @@ -1349,9 +1563,9 @@ Discarded input sections 0x00000000 0xdc ..\obj\lib\xmclib\src\xmc_ccu8.o .rodata.str1.4 0x00000000 0x3d ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_info 0x00000000 0x31f4 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_info 0x00000000 0x31d1 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_abbrev 0x00000000 0x2c8 ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_loc 0x00000000 0x2df6 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_loc 0x00000000 0x2e85 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_aranges 0x00000000 0x158 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_ranges 0x00000000 0x148 ..\obj\lib\xmclib\src\xmc_ccu8.o @@ -1376,14 +1590,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_ccu8.o @@ -1396,9 +1610,9 @@ Discarded input sections .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x3e3 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_line 0x00000000 0xd89 ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_str 0x00000000 0x79da3 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_line 0x00000000 0xd96 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_str 0x00000000 0x797c0 ..\obj\lib\xmclib\src\xmc_ccu8.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_frame 0x00000000 0x474 ..\obj\lib\xmclib\src\xmc_ccu8.o .ARM.attributes @@ -1461,13 +1675,13 @@ Discarded input sections .text.XMC_PRIOARRAY_Init 0x00000000 0x78 ..\obj\lib\xmclib\src\xmc_common.o .text.XMC_PRIOARRAY_Add - 0x00000000 0xb0 ..\obj\lib\xmclib\src\xmc_common.o + 0x00000000 0xb4 ..\obj\lib\xmclib\src\xmc_common.o .text.XMC_PRIOARRAY_Remove 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc_common.o .rodata.str1.4 0x00000000 0x3f ..\obj\lib\xmclib\src\xmc_common.o - .debug_info 0x00000000 0x565 ..\obj\lib\xmclib\src\xmc_common.o - .debug_abbrev 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_common.o + .debug_info 0x00000000 0x569 ..\obj\lib\xmclib\src\xmc_common.o + .debug_abbrev 0x00000000 0x18a ..\obj\lib\xmclib\src\xmc_common.o .debug_loc 0x00000000 0x312 ..\obj\lib\xmclib\src\xmc_common.o .debug_aranges 0x00000000 0x68 ..\obj\lib\xmclib\src\xmc_common.o @@ -1493,14 +1707,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_common.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_common.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_common.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_common.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_common.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_common.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_common.o @@ -1511,8 +1725,8 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_common.o - .debug_line 0x00000000 0x519 ..\obj\lib\xmclib\src\xmc_common.o - .debug_str 0x00000000 0x75ac7 ..\obj\lib\xmclib\src\xmc_common.o + .debug_line 0x00000000 0x51a ..\obj\lib\xmclib\src\xmc_common.o + .debug_str 0x00000000 0x75594 ..\obj\lib\xmclib\src\xmc_common.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_common.o .debug_frame 0x00000000 0xe0 ..\obj\lib\xmclib\src\xmc_common.o .ARM.attributes @@ -1613,14 +1827,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_dac.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_dac.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_dac.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_dac.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_dac.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_dac.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_dac.o @@ -1632,9 +1846,9 @@ Discarded input sections .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x51 ..\obj\lib\xmclib\src\xmc_dac.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_dac.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_dac.o .debug_line 0x00000000 0x69b ..\obj\lib\xmclib\src\xmc_dac.o - .debug_str 0x00000000 0x7741a ..\obj\lib\xmclib\src\xmc_dac.o + .debug_str 0x00000000 0x76e53 ..\obj\lib\xmclib\src\xmc_dac.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_dac.o .debug_frame 0x00000000 0x168 ..\obj\lib\xmclib\src\xmc_dac.o .ARM.attributes @@ -1700,7 +1914,7 @@ Discarded input sections .text.XMC_DMA_GetOverrunStatus 0x00000000 0x34 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_ClearOverrunStatus - 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc_dma.o + 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_CH_Disable 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_CH_IsEnabled @@ -1712,9 +1926,9 @@ Discarded input sections .text.XMC_DMA_CH_IsSuspended 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_CH_EnableEvent - 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc_dma.o + 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_CH_DisableEvent - 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc_dma.o + 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_CH_ClearEventStatus 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_CH_Init @@ -1750,10 +1964,10 @@ Discarded input sections .text.XMC_DMA_CH_ClearDestinationPeripheralRequest 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_IRQHandler - 0x00000000 0x124 ..\obj\lib\xmclib\src\xmc_dma.o - .debug_info 0x00000000 0x18db ..\obj\lib\xmclib\src\xmc_dma.o - .debug_abbrev 0x00000000 0x30e ..\obj\lib\xmclib\src\xmc_dma.o - .debug_loc 0x00000000 0xcdd ..\obj\lib\xmclib\src\xmc_dma.o + 0x00000000 0x120 ..\obj\lib\xmclib\src\xmc_dma.o + .debug_info 0x00000000 0x18bc ..\obj\lib\xmclib\src\xmc_dma.o + .debug_abbrev 0x00000000 0x317 ..\obj\lib\xmclib\src\xmc_dma.o + .debug_loc 0x00000000 0xc89 ..\obj\lib\xmclib\src\xmc_dma.o .debug_aranges 0x00000000 0x128 ..\obj\lib\xmclib\src\xmc_dma.o .debug_ranges 0x00000000 0x118 ..\obj\lib\xmclib\src\xmc_dma.o @@ -1778,14 +1992,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_dma.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_dma.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_dma.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_dma.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_dma.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_dma.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_dma.o @@ -1798,11 +2012,11 @@ Discarded input sections .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x3c2 ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_dma.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_dma.o - .debug_line 0x00000000 0x820 ..\obj\lib\xmclib\src\xmc_dma.o - .debug_str 0x00000000 0x79cc4 ..\obj\lib\xmclib\src\xmc_dma.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_dma.o + .debug_line 0x00000000 0x81d ..\obj\lib\xmclib\src\xmc_dma.o + .debug_str 0x00000000 0x796fd ..\obj\lib\xmclib\src\xmc_dma.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_dma.o - .debug_frame 0x00000000 0x2dc ..\obj\lib\xmclib\src\xmc_dma.o + .debug_frame 0x00000000 0x2d4 ..\obj\lib\xmclib\src\xmc_dma.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_dma.o COMMON 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc_dma.o @@ -1908,14 +2122,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_dsd.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_dsd.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_dsd.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_dsd.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_dsd.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_dsd.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_dsd.o @@ -1926,10 +2140,10 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dsd.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_dsd.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_dsd.o .debug_line 0x00000000 0x696 ..\obj\lib\xmclib\src\xmc_dsd.o - .debug_str 0x00000000 0x76fec ..\obj\lib\xmclib\src\xmc_dsd.o + .debug_str 0x00000000 0x76a25 ..\obj\lib\xmclib\src\xmc_dsd.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_dsd.o .debug_frame 0x00000000 0x190 ..\obj\lib\xmclib\src\xmc_dsd.o .ARM.attributes @@ -1985,7 +2199,7 @@ Discarded input sections 0x00000000 0x54 ..\obj\lib\xmclib\src\xmc_ebu.o .rodata.str1.4 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc_ebu.o - .debug_info 0x00000000 0xd27 ..\obj\lib\xmclib\src\xmc_ebu.o + .debug_info 0x00000000 0xd57 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_abbrev 0x00000000 0x21a ..\obj\lib\xmclib\src\xmc_ebu.o .debug_loc 0x00000000 0x11b ..\obj\lib\xmclib\src\xmc_ebu.o .debug_aranges @@ -2012,14 +2226,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_ebu.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_ebu.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_ebu.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_ebu.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_ebu.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_ebu.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_ebu.o @@ -2030,14 +2244,103 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ebu.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_ebu.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_line 0x00000000 0x49a ..\obj\lib\xmclib\src\xmc_ebu.o - .debug_str 0x00000000 0x76ca6 ..\obj\lib\xmclib\src\xmc_ebu.o + .debug_str 0x00000000 0x7672e ..\obj\lib\xmclib\src\xmc_ebu.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_ebu.o .debug_frame 0x00000000 0x64 ..\obj\lib\xmclib\src\xmc_ebu.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_ebu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .text 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_ecat.o + .data 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_ecat.o + .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_info 0x00000000 0xa4 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_abbrev 0x00000000 0x4e ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_aranges + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x21c ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x87 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0xfd ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x5e ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x1df ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x1f ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x43 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x65 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_line 0x00000000 0x40a ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_str 0x00000000 0x753d1 ..\obj\lib\xmclib\src\xmc_ecat.o + .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_ecat.o + .ARM.attributes + 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_ecat.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_eru.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_eru.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_eru.o @@ -2091,6 +2394,8 @@ Discarded input sections 0x00000000 0x6c ..\obj\lib\xmclib\src\xmc_eru.o .text.XMC_ERU_ETL_SetEdgeDetection 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_eru.o + .text.XMC_ERU_ETL_GetEdgeDetection + 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc_eru.o .text.XMC_ERU_ETL_SetStatusFlagMode 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_eru.o .text.XMC_ERU_ETL_EnableOutputTrigger @@ -2102,19 +2407,19 @@ Discarded input sections .text.XMC_ERU_OGU_DisablePatternDetection 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_eru.o .text.XMC_ERU_OGU_EnablePeripheralTrigger - 0x00000000 0x58 ..\obj\lib\xmclib\src\xmc_eru.o + 0x00000000 0x5c ..\obj\lib\xmclib\src\xmc_eru.o .text.XMC_ERU_OGU_DisablePeripheralTrigger 0x00000000 0x48 ..\obj\lib\xmclib\src\xmc_eru.o .text.XMC_ERU_OGU_SetServiceRequestMode 0x00000000 0x58 ..\obj\lib\xmclib\src\xmc_eru.o .rodata.str1.4 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_eru.o - .debug_info 0x00000000 0xe3a ..\obj\lib\xmclib\src\xmc_eru.o - .debug_abbrev 0x00000000 0x1fd ..\obj\lib\xmclib\src\xmc_eru.o - .debug_loc 0x00000000 0x56a ..\obj\lib\xmclib\src\xmc_eru.o + .debug_info 0x00000000 0xeae ..\obj\lib\xmclib\src\xmc_eru.o + .debug_abbrev 0x00000000 0x219 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_loc 0x00000000 0x5b7 ..\obj\lib\xmclib\src\xmc_eru.o .debug_aranges - 0x00000000 0x80 ..\obj\lib\xmclib\src\xmc_eru.o - .debug_ranges 0x00000000 0x70 ..\obj\lib\xmclib\src\xmc_eru.o + 0x00000000 0x88 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_ranges 0x00000000 0x78 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x272 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_eru.o @@ -2136,14 +2441,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_eru.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_eru.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_eru.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_eru.o @@ -2156,10 +2461,10 @@ Discarded input sections .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x2a1 ..\obj\lib\xmclib\src\xmc_eru.o - .debug_line 0x00000000 0x648 ..\obj\lib\xmclib\src\xmc_eru.o - .debug_str 0x00000000 0x77eca ..\obj\lib\xmclib\src\xmc_eru.o + .debug_line 0x00000000 0x66a ..\obj\lib\xmclib\src\xmc_eru.o + .debug_str 0x00000000 0x779b4 ..\obj\lib\xmclib\src\xmc_eru.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_eru.o - .debug_frame 0x00000000 0x180 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_frame 0x00000000 0x19c ..\obj\lib\xmclib\src\xmc_eru.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_eru.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_eth_mac.o @@ -2211,7 +2516,7 @@ Discarded input sections .text.XMC_ETH_MAC_InitRxDescriptors 0x00000000 0x78 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_InitTxDescriptors - 0x00000000 0x74 ..\obj\lib\xmclib\src\xmc_eth_mac.o + 0x00000000 0x70 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_SetAddressPerfectFilter 0x00000000 0x4c ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_SetAddressHashFilter @@ -2221,13 +2526,13 @@ Discarded input sections .text.XMC_ETH_MAC_ReadFrame 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_GetRxFrameSize - 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc_eth_mac.o + 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_SetManagmentClockDivider 0x00000000 0x8c ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_Enable 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_Init - 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_eth_mac.o + 0x00000000 0xac ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_Disable 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_ReadPhy @@ -2243,17 +2548,15 @@ Discarded input sections .text.XMC_ETH_MAC_EnableEvent 0x00000000 0x54 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_DisableEvent - 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc_eth_mac.o + 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_ClearEventStatus 0x00000000 0x4c ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_GetEventStatus 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_ReturnRxDescriptor - 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc_eth_mac.o + 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_ReturnTxDescriptor - 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .text.XMC_ETH_MAC_IsTxDescriptorOwnedByDma - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_eth_mac.o + 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_SetVLANTag 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_InitPTP @@ -2274,13 +2577,13 @@ Discarded input sections 0x00000000 0x4c ..\obj\lib\xmclib\src\xmc_eth_mac.o .rodata.str1.4 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_info 0x00000000 0x1dd5 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_abbrev 0x00000000 0x333 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_loc 0x00000000 0xbfe ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_info 0x00000000 0x1daa ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_abbrev 0x00000000 0x315 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_loc 0x00000000 0xc37 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_aranges - 0x00000000 0x118 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_ranges 0x00000000 0x108 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_macro 0x00000000 0x3f9 ..\obj\lib\xmclib\src\xmc_eth_mac.o + 0x00000000 0x110 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_ranges 0x00000000 0x100 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_macro 0x00000000 0x2e9 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_eth_mac.o @@ -2301,14 +2604,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_eth_mac.o @@ -2319,15 +2622,15 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_macro 0x00000000 0x131 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x29 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_line 0x00000000 0x8a8 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_str 0x00000000 0x78b74 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_line 0x00000000 0x8aa ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_str 0x00000000 0x785b0 ..\obj\lib\xmclib\src\xmc_eth_mac.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_frame 0x00000000 0x344 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_frame 0x00000000 0x334 ..\obj\lib\xmclib\src\xmc_eth_mac.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_eth_mac.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_fce.o @@ -2420,14 +2723,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_fce.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_fce.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_fce.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_fce.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_fce.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_fce.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_fce.o @@ -2439,9 +2742,9 @@ Discarded input sections .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc_fce.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_fce.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_fce.o .debug_line 0x00000000 0x586 ..\obj\lib\xmclib\src\xmc_fce.o - .debug_str 0x00000000 0x7699a ..\obj\lib\xmclib\src\xmc_fce.o + .debug_str 0x00000000 0x763d3 ..\obj\lib\xmclib\src\xmc_fce.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_fce.o .debug_frame 0x00000000 0x130 ..\obj\lib\xmclib\src\xmc_fce.o .ARM.attributes @@ -2512,14 +2815,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_gpio.o @@ -2531,7 +2834,7 @@ Discarded input sections .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_macro 0x00000000 0xd4d ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_macro 0x00000000 0xdc4 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0xba ..\obj\lib\xmclib\src\xmc_gpio.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_hrpwm.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_hrpwm.o @@ -2599,14 +2902,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_hrpwm.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_hrpwm.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_hrpwm.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_hrpwm.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_hrpwm.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_hrpwm.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_hrpwm.o @@ -2618,7 +2921,7 @@ Discarded input sections .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_line 0x00000000 0x40c ..\obj\lib\xmclib\src\xmc_hrpwm.o - .debug_str 0x00000000 0x75902 ..\obj\lib\xmclib\src\xmc_hrpwm.o + .debug_str 0x00000000 0x753cf ..\obj\lib\xmclib\src\xmc_hrpwm.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_hrpwm.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_hrpwm.o @@ -2696,7 +2999,7 @@ Discarded input sections 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_i2c.o .text.XMC_I2C_CH_DisableEvent 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_i2c.o - .debug_info 0x00000000 0xc42 ..\obj\lib\xmclib\src\xmc_i2c.o + .debug_info 0x00000000 0xc43 ..\obj\lib\xmclib\src\xmc_i2c.o .debug_abbrev 0x00000000 0x2db ..\obj\lib\xmclib\src\xmc_i2c.o .debug_loc 0x00000000 0x4a9 ..\obj\lib\xmclib\src\xmc_i2c.o .debug_aranges @@ -2723,14 +3026,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_i2c.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_i2c.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_i2c.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_i2c.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_i2c.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_i2c.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_i2c.o @@ -2741,11 +3044,11 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_i2c.o - .debug_macro 0x00000000 0x88 ..\obj\lib\xmclib\src\xmc_i2c.o - .debug_macro 0x00000000 0x2da ..\obj\lib\xmclib\src\xmc_i2c.o + .debug_macro 0x00000000 0x8b ..\obj\lib\xmclib\src\xmc_i2c.o + .debug_macro 0x00000000 0x2ef ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x2e ..\obj\lib\xmclib\src\xmc_i2c.o .debug_line 0x00000000 0x654 ..\obj\lib\xmclib\src\xmc_i2c.o - .debug_str 0x00000000 0x7711e ..\obj\lib\xmclib\src\xmc_i2c.o + .debug_str 0x00000000 0x76c28 ..\obj\lib\xmclib\src\xmc_i2c.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_i2c.o .debug_frame 0x00000000 0x12c ..\obj\lib\xmclib\src\xmc_i2c.o .ARM.attributes @@ -2797,10 +3100,10 @@ Discarded input sections .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_i2s.o .text.XMC_I2S_CH_SetBaudrate 0x00000000 0x34 ..\obj\lib\xmclib\src\xmc_i2s.o - .text.XMC_I2S_CH_Init - 0x00000000 0x7c ..\obj\lib\xmclib\src\xmc_i2s.o .text.XMC_I2S_CH_SetSystemWordLength 0x00000000 0x7c ..\obj\lib\xmclib\src\xmc_i2s.o + .text.XMC_I2S_CH_Init + 0x00000000 0x84 ..\obj\lib\xmclib\src\xmc_i2s.o .text.XMC_I2S_CH_Transmit 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc_i2s.o .text.XMC_I2S_CH_GetReceivedData @@ -2813,8 +3116,8 @@ Discarded input sections 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_i2s.o .rodata.str1.4 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_info 0x00000000 0x9bb ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_abbrev 0x00000000 0x276 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_info 0x00000000 0x9d5 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_abbrev 0x00000000 0x2ae ..\obj\lib\xmclib\src\xmc_i2s.o .debug_loc 0x00000000 0x41d ..\obj\lib\xmclib\src\xmc_i2s.o .debug_aranges 0x00000000 0x58 ..\obj\lib\xmclib\src\xmc_i2s.o @@ -2840,14 +3143,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_i2s.o @@ -2858,12 +3161,12 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_macro 0x00000000 0x8e ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_macro 0x00000000 0x2da ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_macro 0x00000000 0x91 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_macro 0x00000000 0x2ef ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_line 0x00000000 0x56c ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_str 0x00000000 0x77532 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_line 0x00000000 0x571 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_str 0x00000000 0x76fa8 ..\obj\lib\xmclib\src\xmc_i2s.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_i2s.o .debug_frame 0x00000000 0xb8 ..\obj\lib\xmclib\src\xmc_i2s.o .ARM.attributes @@ -2972,14 +3275,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_ledts.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_ledts.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_ledts.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_ledts.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_ledts.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_ledts.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_ledts.o @@ -2990,14 +3293,192 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ledts.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_ledts.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc_ledts.o .debug_line 0x00000000 0x618 ..\obj\lib\xmclib\src\xmc_ledts.o - .debug_str 0x00000000 0x76e45 ..\obj\lib\xmclib\src\xmc_ledts.o + .debug_str 0x00000000 0x7687e ..\obj\lib\xmclib\src\xmc_ledts.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_ledts.o .debug_frame 0x00000000 0x1cc ..\obj\lib\xmclib\src\xmc_ledts.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_ledts.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .text 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_math.o + .data 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_math.o + .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_math.o + .debug_info 0x00000000 0xa4 ..\obj\lib\xmclib\src\xmc_math.o + .debug_abbrev 0x00000000 0x4e ..\obj\lib\xmclib\src\xmc_math.o + .debug_aranges + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x21c ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x87 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0xfd ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x5e ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x1df ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x1f ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x43 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x65 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_math.o + .debug_line 0x00000000 0x40a ..\obj\lib\xmclib\src\xmc_math.o + .debug_str 0x00000000 0x753d1 ..\obj\lib\xmclib\src\xmc_math.o + .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_math.o + .ARM.attributes + 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .text 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_pau.o + .data 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_pau.o + .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_info 0x00000000 0xa4 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_abbrev 0x00000000 0x4e ..\obj\lib\xmclib\src\xmc_pau.o + .debug_aranges + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x21c ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x87 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0xfd ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x5e ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x1df ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x1f ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x43 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x65 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_line 0x00000000 0x408 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_str 0x00000000 0x753cf ..\obj\lib\xmclib\src\xmc_pau.o + .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_pau.o + .ARM.attributes + 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_pau.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_posif.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_posif.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_posif.o @@ -3046,7 +3527,7 @@ Discarded input sections .text.XMC_POSIF_Disable 0x00000000 0x48 ..\obj\lib\xmclib\src\xmc_posif.o .text.XMC_POSIF_Init - 0x00000000 0x4c ..\obj\lib\xmclib\src\xmc_posif.o + 0x00000000 0x48 ..\obj\lib\xmclib\src\xmc_posif.o .text.XMC_POSIF_HSC_Init 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_posif.o .text.XMC_POSIF_QD_Init @@ -3086,14 +3567,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_posif.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_posif.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_posif.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_posif.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_posif.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_posif.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_posif.o @@ -3104,14 +3585,103 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_posif.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_posif.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_posif.o .debug_line 0x00000000 0x591 ..\obj\lib\xmclib\src\xmc_posif.o - .debug_str 0x00000000 0x76e2b ..\obj\lib\xmclib\src\xmc_posif.o + .debug_str 0x00000000 0x76864 ..\obj\lib\xmclib\src\xmc_posif.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_posif.o .debug_frame 0x00000000 0xec ..\obj\lib\xmclib\src\xmc_posif.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_posif.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .text 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_prng.o + .data 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_prng.o + .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_info 0x00000000 0xa4 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_abbrev 0x00000000 0x4e ..\obj\lib\xmclib\src\xmc_prng.o + .debug_aranges + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x21c ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x87 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0xfd ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x5e ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x1df ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x1f ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x43 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x65 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_line 0x00000000 0x40a ..\obj\lib\xmclib\src\xmc_prng.o + .debug_str 0x00000000 0x753d1 ..\obj\lib\xmclib\src\xmc_prng.o + .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_prng.o + .ARM.attributes + 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_prng.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_rtc.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_rtc.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_rtc.o @@ -3175,24 +3745,28 @@ Discarded input sections 0x00000000 0xb4 ..\obj\lib\xmclib\src\xmc_rtc.o .text.XMC_RTC_GetTime 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_rtc.o + .text.XMC_RTC_SetTimeStdFormat + 0x00000000 0x70 ..\obj\lib\xmclib\src\xmc_rtc.o .text.XMC_RTC_GetTimeStdFormat 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_rtc.o .text.XMC_RTC_SetAlarm 0x00000000 0xa4 ..\obj\lib\xmclib\src\xmc_rtc.o .text.XMC_RTC_GetAlarm 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_rtc.o + .text.XMC_RTC_SetAlarmStdFormat + 0x00000000 0x64 ..\obj\lib\xmclib\src\xmc_rtc.o .text.XMC_RTC_GetAlarmStdFormat 0x00000000 0x4c ..\obj\lib\xmclib\src\xmc_rtc.o .text.XMC_RTC_GetEventStatus 0x00000000 0xc ..\obj\lib\xmclib\src\xmc_rtc.o .rodata.str1.4 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_info 0x00000000 0x8e8 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_abbrev 0x00000000 0x1ec ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_loc 0x00000000 0x79 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_info 0x00000000 0x985 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_abbrev 0x00000000 0x233 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_loc 0x00000000 0xbb ..\obj\lib\xmclib\src\xmc_rtc.o .debug_aranges - 0x00000000 0x68 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_ranges 0x00000000 0x58 ..\obj\lib\xmclib\src\xmc_rtc.o + 0x00000000 0x78 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_ranges 0x00000000 0x68 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x317 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_rtc.o @@ -3214,14 +3788,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_rtc.o @@ -3232,7 +3806,7 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_rtc.o @@ -3244,10 +3818,10 @@ Discarded input sections .debug_macro 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0xd7 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_line 0x00000000 0x674 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_str 0x00000000 0x76dc2 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_line 0x00000000 0x6a5 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_str 0x00000000 0x7682e ..\obj\lib\xmclib\src\xmc_rtc.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_frame 0x00000000 0xd8 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_frame 0x00000000 0x110 ..\obj\lib\xmclib\src\xmc_rtc.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_rtc.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_sdmmc.o @@ -3310,7 +3884,7 @@ Discarded input sections .text.XMC_SDMMC_DisableEvent 0x00000000 0x34 ..\obj\lib\xmclib\src\xmc_sdmmc.o .text.XMC_SDMMC_ClearEvent - 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_sdmmc.o + 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc_sdmmc.o .text.XMC_SDMMC_GetEvent 0x00000000 0xa8 ..\obj\lib\xmclib\src\xmc_sdmmc.o .text.XMC_SDMMC_GetR2Response @@ -3318,16 +3892,16 @@ Discarded input sections .text.XMC_SDMMC_SendCommand 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc_sdmmc.o .text.XMC_SDMMC_SetDataTransferMode - 0x00000000 0x8c ..\obj\lib\xmclib\src\xmc_sdmmc.o + 0x00000000 0x70 ..\obj\lib\xmclib\src\xmc_sdmmc.o .rodata.str1.4 - 0x00000000 0x3e ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_info 0x00000000 0xe93 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_abbrev 0x00000000 0x270 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_loc 0x00000000 0x468 ..\obj\lib\xmclib\src\xmc_sdmmc.o + 0x00000000 0x1e ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_info 0x00000000 0xdbc ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_abbrev 0x00000000 0x238 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_loc 0x00000000 0x441 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_aranges 0x00000000 0x80 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_ranges 0x00000000 0x70 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_macro 0x00000000 0x25f ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_macro 0x00000000 0x260 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_sdmmc.o @@ -3348,14 +3922,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_sdmmc.o @@ -3366,10 +3940,10 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_macro 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_line 0x00000000 0x644 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_str 0x00000000 0x77d76 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_macro 0x00000000 0x47 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_line 0x00000000 0x63a ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_str 0x00000000 0x77566 ..\obj\lib\xmclib\src\xmc_sdmmc.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_frame 0x00000000 0x170 ..\obj\lib\xmclib\src\xmc_sdmmc.o .ARM.attributes @@ -3466,14 +4040,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_spi.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_spi.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_spi.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_spi.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_spi.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_spi.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_spi.o @@ -3484,12 +4058,12 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_spi.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_spi.o - .debug_macro 0x00000000 0x8e ..\obj\lib\xmclib\src\xmc_spi.o - .debug_macro 0x00000000 0x2da ..\obj\lib\xmclib\src\xmc_spi.o - .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_spi.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_spi.o + .debug_macro 0x00000000 0x91 ..\obj\lib\xmclib\src\xmc_spi.o + .debug_macro 0x00000000 0x2ef ..\obj\lib\xmclib\src\xmc_spi.o + .debug_macro 0x00000000 0x2a ..\obj\lib\xmclib\src\xmc_spi.o .debug_line 0x00000000 0x580 ..\obj\lib\xmclib\src\xmc_spi.o - .debug_str 0x00000000 0x7770d ..\obj\lib\xmclib\src\xmc_spi.o + .debug_str 0x00000000 0x77183 ..\obj\lib\xmclib\src\xmc_spi.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_spi.o .debug_frame 0x00000000 0xe4 ..\obj\lib\xmclib\src\xmc_spi.o .ARM.attributes @@ -3542,7 +4116,7 @@ Discarded input sections .text.XMC_UART_CH_SetBaudrate 0x00000000 0x34 ..\obj\lib\xmclib\src\xmc_uart.o .text.XMC_UART_CH_Stop - 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_uart.o + 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc_uart.o .text.XMC_UART_CH_EnableEvent 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_uart.o .text.XMC_UART_CH_DisableEvent @@ -3567,14 +4141,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_uart.o @@ -3585,9 +4159,9 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x00000000 0x8e ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x00000000 0x2da ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x00000000 0x91 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x00000000 0x2ef ..\obj\lib\xmclib\src\xmc_uart.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbd.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbd.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbd.o @@ -3751,14 +4325,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_usbd.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_usbd.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_usbd.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_usbd.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_usbd.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_usbd.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_usbd.o @@ -3773,15 +4347,178 @@ Discarded input sections .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x29 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x2c3 ..\obj\lib\xmclib\src\xmc_usbd.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_usbd.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0xc5 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_line 0x00000000 0xa51 ..\obj\lib\xmclib\src\xmc_usbd.o - .debug_str 0x00000000 0x79675 ..\obj\lib\xmclib\src\xmc_usbd.o + .debug_str 0x00000000 0x790ae ..\obj\lib\xmclib\src\xmc_usbd.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_usbd.o .debug_frame 0x00000000 0x3d4 ..\obj\lib\xmclib\src\xmc_usbd.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_usbd.o COMMON 0x00000000 0x20c ..\obj\lib\xmclib\src\xmc_usbd.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .text 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_usbh.o + .data 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_usbh.o + .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_lStartTransfer + 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_GetVersion + 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_GetCapabilities + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PortSuspend + 0x00000000 0x3c ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PortGetState + 0x00000000 0x3c ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PipeModify + 0x00000000 0x68 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PipeReset + 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PipeTransfer + 0x00000000 0xb8 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PipeTransferGetResult + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_GetFrameNumber + 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PortVbusOnOff + 0x00000000 0x68 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_Initialize + 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PipeDelete + 0x00000000 0x54 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PipeCreate + 0x00000000 0xdc ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_HandleIrq + 0x00000000 0x4a8 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_GetInterruptStatus + 0x00000000 0xc ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_Select_VBUS + 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_TurnOffResumeBit + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_osDelay + 0x00000000 0x4 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PipeTransferAbort + 0x00000000 0xb4 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PortResume + 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PortReset + 0x00000000 0x6c ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PowerControl + 0x00000000 0x168 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_Uninitialize + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_usbh.o + .data.XMC_USBH0_device + 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc_usbh.o + .bss.XMC_USBH0_dfifo_ptr + 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc_usbh.o + .data.VBUS_pin + 0x00000000 0x4 ..\obj\lib\xmclib\src\xmc_usbh.o + .data.VBUS_port + 0x00000000 0x4 ..\obj\lib\xmclib\src\xmc_usbh.o + .rodata.xmc_usbh_driver_version + 0x00000000 0x4 ..\obj\lib\xmclib\src\xmc_usbh.o + .rodata.Driver_USBH0 + 0x00000000 0x48 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_info 0x00000000 0x2287 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_abbrev 0x00000000 0x42d ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_loc 0x00000000 0x1685 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_aranges + 0x00000000 0xd8 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_ranges 0x00000000 0xc8 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x27f ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x87 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0xfd ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x5e ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x1df ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x1f ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x43 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x65 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0xdc4 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0xba ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x1f8 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_line 0x00000000 0x96c ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_str 0x00000000 0x7e390 ..\obj\lib\xmclib\src\xmc_usbh.o + .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_frame 0x00000000 0x248 ..\obj\lib\xmclib\src\xmc_usbh.o + .ARM.attributes + 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_usbh.o + COMMON 0x00000000 0x1ce ..\obj\lib\xmclib\src\xmc_usbh.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usic.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usic.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usic.o @@ -3862,14 +4599,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_usic.o @@ -3880,9 +4617,9 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_macro 0x00000000 0x88 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_macro 0x00000000 0x2da ..\obj\lib\xmclib\src\xmc_usic.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_macro 0x00000000 0x8b ..\obj\lib\xmclib\src\xmc_usic.o + .debug_macro 0x00000000 0x2ef ..\obj\lib\xmclib\src\xmc_usic.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_usic.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_vadc.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_vadc.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_vadc.o @@ -3961,8 +4698,10 @@ Discarded input sections .text.XMC_VADC_GROUP_SetSyncMaster 0x00000000 0x58 ..\obj\lib\xmclib\src\xmc_vadc.o .text.XMC_VADC_GROUP_CheckSlaveReadiness - 0x00000000 0x74 ..\obj\lib\xmclib\src\xmc_vadc.o + 0x00000000 0x90 ..\obj\lib\xmclib\src\xmc_vadc.o .text.XMC_VADC_GROUP_IgnoreSlaveReadiness + 0x00000000 0x90 ..\obj\lib\xmclib\src\xmc_vadc.o + .text.XMC_VADC_GROUP_SetSyncSlaveReadySignal 0x00000000 0x74 ..\obj\lib\xmclib\src\xmc_vadc.o .text.XMC_VADC_GROUP_EnableChannelSyncRequest 0x00000000 0x74 ..\obj\lib\xmclib\src\xmc_vadc.o @@ -4068,13 +4807,13 @@ Discarded input sections 0x00000000 0x3d ..\obj\lib\xmclib\src\xmc_vadc.o .rodata.g_xmc_vadc_group_array 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_info 0x00000000 0x4774 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_abbrev 0x00000000 0x32a ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_loc 0x00000000 0x2b4a ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_info 0x00000000 0x4833 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_abbrev 0x00000000 0x30c ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_loc 0x00000000 0x2bdf ..\obj\lib\xmclib\src\xmc_vadc.o .debug_aranges - 0x00000000 0x240 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_ranges 0x00000000 0x290 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_macro 0x00000000 0x25b ..\obj\lib\xmclib\src\xmc_vadc.o + 0x00000000 0x248 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_ranges 0x00000000 0x298 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_macro 0x00000000 0x261 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_vadc.o @@ -4095,14 +4834,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_vadc.o @@ -4113,12 +4852,12 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_macro 0x00000000 0x66 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_line 0x00000000 0x1209 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_str 0x00000000 0x78c7b ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_macro 0x00000000 0x74 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_line 0x00000000 0x1262 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_str 0x00000000 0x78759 ..\obj\lib\xmclib\src\xmc_vadc.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_frame 0x00000000 0x790 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_frame 0x00000000 0x7ac ..\obj\lib\xmclib\src\xmc_vadc.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_vadc.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_wdt.o @@ -4196,14 +4935,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_wdt.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_wdt.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_wdt.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_wdt.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_wdt.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_wdt.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_wdt.o @@ -4214,9 +4953,9 @@ Discarded input sections .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_wdt.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_wdt.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_wdt.o .debug_line 0x00000000 0x45c ..\obj\lib\xmclib\src\xmc_wdt.o - .debug_str 0x00000000 0x7677a ..\obj\lib\xmclib\src\xmc_wdt.o + .debug_str 0x00000000 0x761b3 ..\obj\lib\xmclib\src\xmc_wdt.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_wdt.o .debug_frame 0x00000000 0x58 ..\obj\lib\xmclib\src\xmc_wdt.o .ARM.attributes @@ -4295,20 +5034,20 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\main.o .debug_macro 0x00000000 0x10 ..\obj\main.o .debug_macro 0x00000000 0x35 ..\obj\main.o - .debug_macro 0x00000000 0x162 ..\obj\main.o + .debug_macro 0x00000000 0x16e ..\obj\main.o .debug_macro 0x00000000 0x2d ..\obj\main.o .debug_macro 0x00000000 0x3b ..\obj\main.o .debug_macro 0x00000000 0x50 ..\obj\main.o .debug_macro 0x00000000 0xe66 ..\obj\main.o .debug_macro 0x00000000 0x16 ..\obj\main.o - .debug_macro 0x00000000 0x166f2 ..\obj\main.o - .debug_macro 0x00000000 0x12 ..\obj\main.o + .debug_macro 0x00000000 0x165d5 ..\obj\main.o + .debug_macro 0x00000000 0x19 ..\obj\main.o .debug_macro 0x00000000 0x4c ..\obj\main.o .debug_macro 0x00000000 0x22 ..\obj\main.o - .debug_macro 0x00000000 0xd4d ..\obj\main.o + .debug_macro 0x00000000 0xdc4 ..\obj\main.o .debug_macro 0x00000000 0xba ..\obj\main.o - .debug_macro 0x00000000 0x8e ..\obj\main.o - .debug_macro 0x00000000 0x2da ..\obj\main.o + .debug_macro 0x00000000 0x91 ..\obj\main.o + .debug_macro 0x00000000 0x2ef ..\obj\main.o .debug_macro 0x00000000 0x28 ..\obj\main.o .group 0x00000000 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o .group 0x00000000 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o @@ -4402,16 +5141,16 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .debug_macro 0x00000000 0x10 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .debug_macro 0x00000000 0x35 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - .debug_macro 0x00000000 0x162 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + .debug_macro 0x00000000 0x16e ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .debug_macro 0x00000000 0x2d ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .debug_macro 0x00000000 0x3b ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .debug_macro 0x00000000 0x50 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .debug_macro 0x00000000 0xe66 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .debug_macro 0x00000000 0x16 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - .debug_macro 0x00000000 0x166f2 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - .debug_macro 0x00000000 0x12 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + .debug_macro 0x00000000 0x165d5 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + .debug_macro 0x00000000 0x19 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .debug_macro 0x00000000 0x4c ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - .debug_macro 0x00000000 0xda ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + .debug_macro 0x00000000 0xdd ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .group 0x00000000 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o .group 0x00000000 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o .group 0x00000000 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o @@ -4548,17 +5287,17 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o .debug_macro 0x00000000 0x10 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o .debug_macro 0x00000000 0x35 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - .debug_macro 0x00000000 0x162 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + .debug_macro 0x00000000 0x16e ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o .debug_macro 0x00000000 0x2d ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o .debug_macro 0x00000000 0x3b ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o .debug_macro 0x00000000 0x50 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o .debug_macro 0x00000000 0xe66 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o .debug_macro 0x00000000 0x16 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - .debug_macro 0x00000000 0x166f2 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - .debug_macro 0x00000000 0x12 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + .debug_macro 0x00000000 0x165d5 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + .debug_macro 0x00000000 0x19 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o .debug_macro 0x00000000 0x4c ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - .debug_macro 0x00000000 0x88 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - .debug_macro 0x00000000 0x2da ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + .debug_macro 0x00000000 0x8b ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + .debug_macro 0x00000000 0x2ef ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o .debug_macro 0x00000000 0x28 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o .group 0x00000000 0x8 ..\obj\~#\~#\~#\source\assert.o .group 0x00000000 0x8 ..\obj\~#\~#\~#\source\assert.o @@ -4827,7 +5566,7 @@ LOAD c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none- 0x00000000 __HEAP_SIZE = 0x0 0x00000800 __STACK_SIZE = 0x800 -.text 0x08000000 0x1cbc +.text 0x08000000 0x1c9c *(.isr_vector) .isr_vector 0x08000000 0x200 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o 0x08000000 __isr_vector @@ -4865,35 +5604,35 @@ LOAD c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none- 0x080003d8 0x8c ..\obj\lib\system_xmc4700.o 0x080003d8 SystemCoreClockUpdate .text.SystemCoreClockSetup - 0x08000464 0x1bc ..\obj\lib\system_xmc4700.o + 0x08000464 0x198 ..\obj\lib\system_xmc4700.o 0x08000464 SystemCoreClockSetup .text.SystemInit - 0x08000620 0x1c ..\obj\lib\system_xmc4700.o - 0x08000620 SystemInit + 0x080005fc 0x1c ..\obj\lib\system_xmc4700.o + 0x080005fc SystemInit .text.XMC_FLASH_lEnterPageModeCommand - 0x0800063c 0xc ..\obj\lib\xmclib\src\xmc4_flash.o - 0x0800063c XMC_FLASH_lEnterPageModeCommand + 0x08000618 0xc ..\obj\lib\xmclib\src\xmc4_flash.o + 0x08000618 XMC_FLASH_lEnterPageModeCommand .text.XMC_FLASH_lLoadPageCommand - 0x08000648 0x10 ..\obj\lib\xmclib\src\xmc4_flash.o - 0x08000648 XMC_FLASH_lLoadPageCommand + 0x08000624 0x10 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x08000624 XMC_FLASH_lLoadPageCommand .text.XMC_FLASH_lWritePageCommand - 0x08000658 0x24 ..\obj\lib\xmclib\src\xmc4_flash.o - 0x08000658 XMC_FLASH_lWritePageCommand + 0x08000634 0x24 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x08000634 XMC_FLASH_lWritePageCommand .text.XMC_FLASH_lEraseSectorCommand - 0x0800067c 0x28 ..\obj\lib\xmclib\src\xmc4_flash.o - 0x0800067c XMC_FLASH_lEraseSectorCommand + 0x08000658 0x28 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x08000658 XMC_FLASH_lEraseSectorCommand .text.XMC_FLASH_lClearStatusCommand - 0x080006a4 0xc ..\obj\lib\xmclib\src\xmc4_flash.o - 0x080006a4 XMC_FLASH_lClearStatusCommand + 0x08000680 0xc ..\obj\lib\xmclib\src\xmc4_flash.o + 0x08000680 XMC_FLASH_lClearStatusCommand .text.XMC_FLASH_GetStatus - 0x080006b0 0x10 ..\obj\lib\xmclib\src\xmc4_flash.o - 0x080006b0 XMC_FLASH_GetStatus + 0x0800068c 0x10 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x0800068c XMC_FLASH_GetStatus .text.XMC_FLASH_ProgramPage - 0x080006c0 0x30 ..\obj\lib\xmclib\src\xmc4_flash.o - 0x080006c0 XMC_FLASH_ProgramPage + 0x0800069c 0x40 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x0800069c XMC_FLASH_ProgramPage .text.XMC_FLASH_EraseSector - 0x080006f0 0x10 ..\obj\lib\xmclib\src\xmc4_flash.o - 0x080006f0 XMC_FLASH_EraseSector + 0x080006dc 0x24 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x080006dc XMC_FLASH_EraseSector .text.XMC_GPIO_Init 0x08000700 0x1a0 ..\obj\lib\xmclib\src\xmc4_gpio.o 0x08000700 XMC_GPIO_Init @@ -4910,228 +5649,228 @@ LOAD c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none- 0x080008e8 0x138 ..\obj\lib\xmclib\src\xmc_gpio.o 0x080008e8 XMC_GPIO_SetMode .text.XMC_UART_CH_Init - 0x08000a20 0x68 ..\obj\lib\xmclib\src\xmc_uart.o + 0x08000a20 0x6c ..\obj\lib\xmclib\src\xmc_uart.o 0x08000a20 XMC_UART_CH_Init .text.XMC_UART_CH_Transmit - 0x08000a88 0x24 ..\obj\lib\xmclib\src\xmc_uart.o - 0x08000a88 XMC_UART_CH_Transmit + 0x08000a8c 0x24 ..\obj\lib\xmclib\src\xmc_uart.o + 0x08000a8c XMC_UART_CH_Transmit .text.XMC_UART_CH_GetReceivedData - 0x08000aac 0x18 ..\obj\lib\xmclib\src\xmc_uart.o - 0x08000aac XMC_UART_CH_GetReceivedData + 0x08000ab0 0x18 ..\obj\lib\xmclib\src\xmc_uart.o + 0x08000ab0 XMC_UART_CH_GetReceivedData .text.XMC_USIC_CH_SetBaudrate - 0x08000ac4 0x8c ..\obj\lib\xmclib\src\xmc_usic.o - 0x08000ac4 XMC_USIC_CH_SetBaudrate + 0x08000ac8 0x8c ..\obj\lib\xmclib\src\xmc_usic.o + 0x08000ac8 XMC_USIC_CH_SetBaudrate .text.XMC_USIC_CH_TXFIFO_Configure - 0x08000b50 0x30 ..\obj\lib\xmclib\src\xmc_usic.o - 0x08000b50 XMC_USIC_CH_TXFIFO_Configure + 0x08000b54 0x30 ..\obj\lib\xmclib\src\xmc_usic.o + 0x08000b54 XMC_USIC_CH_TXFIFO_Configure .text.XMC_USIC_CH_RXFIFO_Configure - 0x08000b80 0x34 ..\obj\lib\xmclib\src\xmc_usic.o - 0x08000b80 XMC_USIC_CH_RXFIFO_Configure + 0x08000b84 0x34 ..\obj\lib\xmclib\src\xmc_usic.o + 0x08000b84 XMC_USIC_CH_RXFIFO_Configure .text.XMC_USIC_Enable - 0x08000bb4 0x6c ..\obj\lib\xmclib\src\xmc_usic.o - 0x08000bb4 XMC_USIC_Enable + 0x08000bb8 0x6c ..\obj\lib\xmclib\src\xmc_usic.o + 0x08000bb8 XMC_USIC_Enable .text.XMC_USIC_CH_Enable - 0x08000c20 0xe0 ..\obj\lib\xmclib\src\xmc_usic.o - 0x08000c20 XMC_USIC_CH_Enable - .text.Init 0x08000d00 0x2c ..\obj\main.o + 0x08000c24 0xe0 ..\obj\lib\xmclib\src\xmc_usic.o + 0x08000c24 XMC_USIC_CH_Enable + .text.Init 0x08000d04 0x2c ..\obj\main.o .text.PostInit - 0x08000d2c 0x50 ..\obj\main.o - .text.main 0x08000d7c 0x14 ..\obj\main.o - 0x08000d7c main - .text.CpuInit 0x08000d90 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o - 0x08000d90 CpuInit + 0x08000d30 0x50 ..\obj\main.o + .text.main 0x08000d80 0x14 ..\obj\main.o + 0x08000d80 main + .text.CpuInit 0x08000d94 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o + 0x08000d94 CpuInit .text.CpuStartUserProgram - 0x08000d98 0x38 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o - 0x08000d98 CpuStartUserProgram + 0x08000d9c 0x38 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o + 0x08000d9c CpuStartUserProgram .text.CpuMemCopy - 0x08000dd0 0x20 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o - 0x08000dd0 CpuMemCopy + 0x08000dd4 0x20 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o + 0x08000dd4 CpuMemCopy .text.FlashTranslateToNonCachedAddress - 0x08000df0 0xc ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x08000df4 0xc ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .text.FlashGetSector - 0x08000dfc 0x48 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x08000e00 0x48 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .text.FlashGetSectorBaseAddr - 0x08000e44 0x38 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x08000e48 0x38 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .text.FlashInitBlock - 0x08000e7c 0x28 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x08000e80 0x28 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .text.FlashWriteBlock - 0x08000ea4 0x90 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x08000ea8 0x90 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .text.FlashSwitchBlock - 0x08000f34 0x40 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x08000f38 0x40 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .text.FlashAddToBlock - 0x08000f74 0x7c ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x08000f78 0x7c ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .text.FlashEraseSectors - 0x08000ff0 0x80 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x08000ff4 0x80 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .text.FlashInit - 0x08001070 0x18 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - 0x08001070 FlashInit + 0x08001074 0x18 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x08001074 FlashInit .text.FlashWrite - 0x08001088 0x60 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - 0x08001088 FlashWrite + 0x0800108c 0x60 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x0800108c FlashWrite .text.FlashErase - 0x080010e8 0x34 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - 0x080010e8 FlashErase + 0x080010ec 0x34 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x080010ec FlashErase .text.FlashWriteChecksum - 0x0800111c 0x50 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - 0x0800111c FlashWriteChecksum + 0x08001120 0x50 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x08001120 FlashWriteChecksum .text.FlashVerifyChecksum - 0x0800116c 0x58 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - 0x0800116c FlashVerifyChecksum + 0x08001170 0x58 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x08001170 FlashVerifyChecksum .text.FlashDone - 0x080011c4 0x40 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - 0x080011c4 FlashDone + 0x080011c8 0x40 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x080011c8 FlashDone .text.FlashGetUserProgBaseAddress - 0x08001204 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - 0x08001204 FlashGetUserProgBaseAddress + 0x08001208 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x08001208 FlashGetUserProgBaseAddress .text.CpuIrqDisable - 0x0800120c 0x4 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o - 0x0800120c CpuIrqDisable - .text.CpuIrqEnable 0x08001210 0x4 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o - 0x08001210 CpuIrqEnable - .text 0x08001214 0x12c ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o - 0x08001214 Reset_Handler - 0x0800125a NMI_Handler - 0x0800125c HardFault_Handler - 0x0800125e MemManage_Handler - 0x08001260 BusFault_Handler - 0x08001262 UsageFault_Handler - 0x08001264 SVC_Handler - 0x08001266 DebugMon_Handler - 0x08001268 PendSV_Handler - 0x0800126a SysTick_Handler - 0x0800126c Default_Handler - 0x0800126e SCU_0_IRQHandler - 0x08001270 ERU0_0_IRQHandler - 0x08001272 ERU0_1_IRQHandler - 0x08001274 ERU0_2_IRQHandler - 0x08001276 ERU0_3_IRQHandler - 0x08001278 ERU1_0_IRQHandler - 0x0800127a ERU1_1_IRQHandler - 0x0800127c ERU1_2_IRQHandler - 0x0800127e ERU1_3_IRQHandler - 0x08001280 PMU0_0_IRQHandler - 0x08001282 VADC0_C0_0_IRQHandler - 0x08001284 VADC0_C0_1_IRQHandler - 0x08001286 VADC0_C0_2_IRQHandler - 0x08001288 VADC0_C0_3_IRQHandler - 0x0800128a VADC0_G0_0_IRQHandler - 0x0800128c VADC0_G0_1_IRQHandler - 0x0800128e VADC0_G0_2_IRQHandler - 0x08001290 VADC0_G0_3_IRQHandler - 0x08001292 VADC0_G1_0_IRQHandler - 0x08001294 VADC0_G1_1_IRQHandler - 0x08001296 VADC0_G1_2_IRQHandler - 0x08001298 VADC0_G1_3_IRQHandler - 0x0800129a VADC0_G2_0_IRQHandler - 0x0800129c VADC0_G2_1_IRQHandler - 0x0800129e VADC0_G2_2_IRQHandler - 0x080012a0 VADC0_G2_3_IRQHandler - 0x080012a2 VADC0_G3_0_IRQHandler - 0x080012a4 VADC0_G3_1_IRQHandler - 0x080012a6 VADC0_G3_2_IRQHandler - 0x080012a8 VADC0_G3_3_IRQHandler - 0x080012aa DSD0_0_IRQHandler - 0x080012ac DSD0_1_IRQHandler - 0x080012ae DSD0_2_IRQHandler - 0x080012b0 DSD0_3_IRQHandler - 0x080012b2 DSD0_4_IRQHandler - 0x080012b4 DSD0_5_IRQHandler - 0x080012b6 DSD0_6_IRQHandler - 0x080012b8 DSD0_7_IRQHandler - 0x080012ba DAC0_0_IRQHandler - 0x080012bc DAC0_1_IRQHandler - 0x080012be CCU40_0_IRQHandler - 0x080012c0 CCU40_1_IRQHandler - 0x080012c2 CCU40_2_IRQHandler - 0x080012c4 CCU40_3_IRQHandler - 0x080012c6 CCU41_0_IRQHandler - 0x080012c8 CCU41_1_IRQHandler - 0x080012ca CCU41_2_IRQHandler - 0x080012cc CCU41_3_IRQHandler - 0x080012ce CCU42_0_IRQHandler - 0x080012d0 CCU42_1_IRQHandler - 0x080012d2 CCU42_2_IRQHandler - 0x080012d4 CCU42_3_IRQHandler - 0x080012d6 CCU43_0_IRQHandler - 0x080012d8 CCU43_1_IRQHandler - 0x080012da CCU43_2_IRQHandler - 0x080012dc CCU43_3_IRQHandler - 0x080012de CCU80_0_IRQHandler - 0x080012e0 CCU80_1_IRQHandler - 0x080012e2 CCU80_2_IRQHandler - 0x080012e4 CCU80_3_IRQHandler - 0x080012e6 CCU81_0_IRQHandler - 0x080012e8 CCU81_1_IRQHandler - 0x080012ea CCU81_2_IRQHandler - 0x080012ec CCU81_3_IRQHandler - 0x080012ee POSIF0_0_IRQHandler - 0x080012f0 POSIF0_1_IRQHandler - 0x080012f2 POSIF1_0_IRQHandler - 0x080012f4 POSIF1_1_IRQHandler - 0x080012f6 CAN0_0_IRQHandler - 0x080012f8 CAN0_1_IRQHandler - 0x080012fa CAN0_2_IRQHandler - 0x080012fc CAN0_3_IRQHandler - 0x080012fe CAN0_4_IRQHandler - 0x08001300 CAN0_5_IRQHandler - 0x08001302 CAN0_6_IRQHandler - 0x08001304 CAN0_7_IRQHandler - 0x08001306 USIC0_0_IRQHandler - 0x08001308 USIC0_1_IRQHandler - 0x0800130a USIC0_2_IRQHandler - 0x0800130c USIC0_3_IRQHandler - 0x0800130e USIC0_4_IRQHandler - 0x08001310 USIC0_5_IRQHandler - 0x08001312 USIC1_0_IRQHandler - 0x08001314 USIC1_1_IRQHandler - 0x08001316 USIC1_2_IRQHandler - 0x08001318 USIC1_3_IRQHandler - 0x0800131a USIC1_4_IRQHandler - 0x0800131c USIC1_5_IRQHandler - 0x0800131e USIC2_0_IRQHandler - 0x08001320 USIC2_1_IRQHandler - 0x08001322 USIC2_2_IRQHandler - 0x08001324 USIC2_3_IRQHandler - 0x08001326 USIC2_4_IRQHandler - 0x08001328 USIC2_5_IRQHandler - 0x0800132a LEDTS0_0_IRQHandler - 0x0800132c FCE0_0_IRQHandler - 0x0800132e GPDMA0_0_IRQHandler - 0x08001330 SDMMC0_0_IRQHandler - 0x08001332 USB0_0_IRQHandler - 0x08001334 ETH0_0_IRQHandler - 0x08001336 GPDMA1_0_IRQHandler - .text.NvmInit 0x08001340 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o - 0x08001340 NvmInit + 0x08001210 CpuIrqDisable + .text.CpuIrqEnable + 0x08001214 0x4 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o + 0x08001214 CpuIrqEnable + .text 0x08001218 0x12c ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o + 0x08001218 Reset_Handler + 0x0800125e NMI_Handler + 0x08001260 HardFault_Handler + 0x08001262 MemManage_Handler + 0x08001264 BusFault_Handler + 0x08001266 UsageFault_Handler + 0x08001268 SVC_Handler + 0x0800126a DebugMon_Handler + 0x0800126c PendSV_Handler + 0x0800126e SysTick_Handler + 0x08001270 Default_Handler + 0x08001272 SCU_0_IRQHandler + 0x08001274 ERU0_0_IRQHandler + 0x08001276 ERU0_1_IRQHandler + 0x08001278 ERU0_2_IRQHandler + 0x0800127a ERU0_3_IRQHandler + 0x0800127c ERU1_0_IRQHandler + 0x0800127e ERU1_1_IRQHandler + 0x08001280 ERU1_2_IRQHandler + 0x08001282 ERU1_3_IRQHandler + 0x08001284 PMU0_0_IRQHandler + 0x08001286 VADC0_C0_0_IRQHandler + 0x08001288 VADC0_C0_1_IRQHandler + 0x0800128a VADC0_C0_2_IRQHandler + 0x0800128c VADC0_C0_3_IRQHandler + 0x0800128e VADC0_G0_0_IRQHandler + 0x08001290 VADC0_G0_1_IRQHandler + 0x08001292 VADC0_G0_2_IRQHandler + 0x08001294 VADC0_G0_3_IRQHandler + 0x08001296 VADC0_G1_0_IRQHandler + 0x08001298 VADC0_G1_1_IRQHandler + 0x0800129a VADC0_G1_2_IRQHandler + 0x0800129c VADC0_G1_3_IRQHandler + 0x0800129e VADC0_G2_0_IRQHandler + 0x080012a0 VADC0_G2_1_IRQHandler + 0x080012a2 VADC0_G2_2_IRQHandler + 0x080012a4 VADC0_G2_3_IRQHandler + 0x080012a6 VADC0_G3_0_IRQHandler + 0x080012a8 VADC0_G3_1_IRQHandler + 0x080012aa VADC0_G3_2_IRQHandler + 0x080012ac VADC0_G3_3_IRQHandler + 0x080012ae DSD0_0_IRQHandler + 0x080012b0 DSD0_1_IRQHandler + 0x080012b2 DSD0_2_IRQHandler + 0x080012b4 DSD0_3_IRQHandler + 0x080012b6 DSD0_4_IRQHandler + 0x080012b8 DSD0_5_IRQHandler + 0x080012ba DSD0_6_IRQHandler + 0x080012bc DSD0_7_IRQHandler + 0x080012be DAC0_0_IRQHandler + 0x080012c0 DAC0_1_IRQHandler + 0x080012c2 CCU40_0_IRQHandler + 0x080012c4 CCU40_1_IRQHandler + 0x080012c6 CCU40_2_IRQHandler + 0x080012c8 CCU40_3_IRQHandler + 0x080012ca CCU41_0_IRQHandler + 0x080012cc CCU41_1_IRQHandler + 0x080012ce CCU41_2_IRQHandler + 0x080012d0 CCU41_3_IRQHandler + 0x080012d2 CCU42_0_IRQHandler + 0x080012d4 CCU42_1_IRQHandler + 0x080012d6 CCU42_2_IRQHandler + 0x080012d8 CCU42_3_IRQHandler + 0x080012da CCU43_0_IRQHandler + 0x080012dc CCU43_1_IRQHandler + 0x080012de CCU43_2_IRQHandler + 0x080012e0 CCU43_3_IRQHandler + 0x080012e2 CCU80_0_IRQHandler + 0x080012e4 CCU80_1_IRQHandler + 0x080012e6 CCU80_2_IRQHandler + 0x080012e8 CCU80_3_IRQHandler + 0x080012ea CCU81_0_IRQHandler + 0x080012ec CCU81_1_IRQHandler + 0x080012ee CCU81_2_IRQHandler + 0x080012f0 CCU81_3_IRQHandler + 0x080012f2 POSIF0_0_IRQHandler + 0x080012f4 POSIF0_1_IRQHandler + 0x080012f6 POSIF1_0_IRQHandler + 0x080012f8 POSIF1_1_IRQHandler + 0x080012fa CAN0_0_IRQHandler + 0x080012fc CAN0_1_IRQHandler + 0x080012fe CAN0_2_IRQHandler + 0x08001300 CAN0_3_IRQHandler + 0x08001302 CAN0_4_IRQHandler + 0x08001304 CAN0_5_IRQHandler + 0x08001306 CAN0_6_IRQHandler + 0x08001308 CAN0_7_IRQHandler + 0x0800130a USIC0_0_IRQHandler + 0x0800130c USIC0_1_IRQHandler + 0x0800130e USIC0_2_IRQHandler + 0x08001310 USIC0_3_IRQHandler + 0x08001312 USIC0_4_IRQHandler + 0x08001314 USIC0_5_IRQHandler + 0x08001316 USIC1_0_IRQHandler + 0x08001318 USIC1_1_IRQHandler + 0x0800131a USIC1_2_IRQHandler + 0x0800131c USIC1_3_IRQHandler + 0x0800131e USIC1_4_IRQHandler + 0x08001320 USIC1_5_IRQHandler + 0x08001322 USIC2_0_IRQHandler + 0x08001324 USIC2_1_IRQHandler + 0x08001326 USIC2_2_IRQHandler + 0x08001328 USIC2_3_IRQHandler + 0x0800132a USIC2_4_IRQHandler + 0x0800132c USIC2_5_IRQHandler + 0x0800132e LEDTS0_0_IRQHandler + 0x08001330 FCE0_0_IRQHandler + 0x08001332 GPDMA0_0_IRQHandler + 0x08001334 SDMMC0_0_IRQHandler + 0x08001336 USB0_0_IRQHandler + 0x08001338 ETH0_0_IRQHandler + 0x0800133a GPDMA1_0_IRQHandler + .text.NvmInit 0x08001344 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + 0x08001344 NvmInit .text.NvmWrite - 0x08001348 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o - 0x08001348 NvmWrite + 0x0800134c 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + 0x0800134c NvmWrite .text.NvmErase - 0x08001350 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o - 0x08001350 NvmErase + 0x08001354 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + 0x08001354 NvmErase .text.NvmVerifyChecksum - 0x08001358 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o - 0x08001358 NvmVerifyChecksum + 0x0800135c 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + 0x0800135c NvmVerifyChecksum .text.NvmGetUserProgBaseAddress - 0x08001360 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o - 0x08001360 NvmGetUserProgBaseAddress - .text.NvmDone 0x08001368 0x14 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o - 0x08001368 NvmDone + 0x08001364 0x8 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + 0x08001364 NvmGetUserProgBaseAddress + .text.NvmDone 0x0800136c 0x14 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + 0x0800136c NvmDone .text.TimerReset - 0x0800137c 0xc ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o - 0x0800137c TimerReset + 0x08001380 0xc ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o + 0x08001380 TimerReset .text.TimerInit - 0x08001388 0x28 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o - 0x08001388 TimerInit + 0x0800138c 0x28 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o + 0x0800138c TimerInit .text.TimerUpdate - 0x080013b0 0x1c ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o - 0x080013b0 TimerUpdate + 0x080013b4 0x1c ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o + 0x080013b4 TimerUpdate .text.TimerGet - 0x080013cc 0x10 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o - 0x080013cc TimerGet + 0x080013d0 0x10 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o + 0x080013d0 TimerGet .text.UartTransmitByte - 0x080013dc 0x3c ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + 0x080013e0 0x38 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o .text.UartReceiveByte 0x08001418 0x24 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o .text.UartInit @@ -5262,62 +6001,58 @@ LOAD c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none- .rodata.str1.4 0x08001b4c 0x1e ..\obj\lib\xmclib\src\xmc4_gpio.o *fill* 0x08001b6a 0x2 - .rodata.clear_peripheral_gate.7779 - 0x08001b6c 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o - .rodata.clear_peripheral_reset.7658 - 0x08001b7c 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .rodata.str1.4 - 0x08001b8c 0x1d ..\obj\lib\xmclib\src\xmc_gpio.o + 0x08001b6c 0x1d ..\obj\lib\xmclib\src\xmc_gpio.o + *fill* 0x08001b89 0x3 + .rodata.str1.4 + 0x08001b8c 0x1d ..\obj\lib\xmclib\src\xmc_usic.o *fill* 0x08001ba9 0x3 - .rodata.str1.4 - 0x08001bac 0x1d ..\obj\lib\xmclib\src\xmc_usic.o - *fill* 0x08001bc9 0x3 .rodata.flashLayout - 0x08001bcc 0xb4 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x08001bac 0xb4 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .rodata.str1.4 - 0x08001c80 0x28 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + 0x08001c60 0x28 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o 0x26 (size before relaxing) .rodata.xcpStationId - 0x08001ca8 0x8 ..\obj\~#\~#\~#\source\xcp.o + 0x08001c88 0x8 ..\obj\~#\~#\~#\source\xcp.o .rodata.str1.1 - 0x08001cb0 0x2 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-impure.o) - *fill* 0x08001cb2 0x2 + 0x08001c90 0x2 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-impure.o) + *fill* 0x08001c92 0x2 .rodata._global_impure_ptr - 0x08001cb4 0x4 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-impure.o) - 0x08001cb4 _global_impure_ptr + 0x08001c94 0x4 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-impure.o) + 0x08001c94 _global_impure_ptr *(.eh_frame*) - .eh_frame 0x08001cb8 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o - .eh_frame 0x08001cb8 0x4 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtend.o + .eh_frame 0x08001c98 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o + .eh_frame 0x08001c98 0x4 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtend.o -.glue_7 0x08001cbc 0x0 - .glue_7 0x08001cbc 0x0 linker stubs +.glue_7 0x08001c9c 0x0 + .glue_7 0x08001c9c 0x0 linker stubs -.glue_7t 0x08001cbc 0x0 - .glue_7t 0x08001cbc 0x0 linker stubs +.glue_7t 0x08001c9c 0x0 + .glue_7t 0x08001c9c 0x0 linker stubs -.vfp11_veneer 0x08001cbc 0x0 - .vfp11_veneer 0x08001cbc 0x0 linker stubs +.vfp11_veneer 0x08001c9c 0x0 + .vfp11_veneer 0x08001c9c 0x0 linker stubs -.v4_bx 0x08001cbc 0x0 - .v4_bx 0x08001cbc 0x0 linker stubs +.v4_bx 0x08001c9c 0x0 + .v4_bx 0x08001c9c 0x0 linker stubs -.iplt 0x08001cbc 0x0 - .iplt 0x08001cbc 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o +.iplt 0x08001c9c 0x0 + .iplt 0x08001c9c 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o .ARM.extab *(.ARM.extab* .gnu.linkonce.armextab.*) - 0x08001cbc __exidx_start = . + 0x08001c9c __exidx_start = . -.ARM.exidx 0x08001cbc 0x8 +.ARM.exidx 0x08001c9c 0x8 *(.ARM.exidx* .gnu.linkonce.armexidx.*) - .ARM.exidx 0x08001cbc 0x8 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu/crt0.o - 0x08001cc4 __exidx_end = . - 0x08001cc4 __etext = . + .ARM.exidx 0x08001c9c 0x8 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu/crt0.o + 0x08001ca4 __exidx_end = . + 0x08001ca4 __etext = . -.rel.dyn 0x08001cc4 0x0 - .rel.iplt 0x08001cc4 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o +.rel.dyn 0x08001ca4 0x0 + .rel.iplt 0x08001ca4 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o -.data 0x20000000 0x6c load address 0x08001cc4 +.data 0x20000000 0x6c load address 0x08001ca4 0x20000000 __data_start__ = . *(vtable) *(.data*) @@ -5345,26 +6080,26 @@ LOAD c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none- 0x2000006c . = ALIGN (0x4) 0x2000006c __data_end__ = . -.jcr 0x2000006c 0x0 load address 0x08001d30 +.jcr 0x2000006c 0x0 load address 0x08001d10 .jcr 0x2000006c 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o -.igot.plt 0x2000006c 0x0 load address 0x08001d30 +.igot.plt 0x2000006c 0x0 load address 0x08001d10 .igot.plt 0x2000006c 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o -.no_init 0x2000006c 0x14 load address 0x08001d30 +.no_init 0x2000006c 0x14 load address 0x08001d10 .no_init 0x2000006c 0x14 ..\obj\lib\system_xmc4700.o 0x2000006c SystemCoreClock 0x20000070 g_chipid -.bss 0x20000080 0x910 load address 0x08001d44 +.bss 0x20000080 0x914 load address 0x08001d24 0x20000080 __bss_start__ = . *(.bss*) .bss 0x20000080 0x1c c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o - .bss.nextBlinkEvent.7158 + .bss.nextBlinkEvent.7154 0x2000009c 0x4 ..\obj\led.o .bss.ledBlinkIntervalMs 0x200000a0 0x2 ..\obj\led.o - .bss.ledOn.7157 + .bss.ledOn.7153 0x200000a2 0x1 ..\obj\led.o *fill* 0x200000a3 0x1 .bss.bootBlockInfo @@ -5373,38 +6108,39 @@ LOAD c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none- 0x200004a8 0x404 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .bss.millisecond_counter 0x200008ac 0x4 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o - .bss.xcpCtoReqPacket.7652 - 0x200008b0 0x41 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - .bss.xcpCtoRxLength.7653 - 0x200008f1 0x1 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - .bss.xcpCtoRxInProgress.7654 - 0x200008f2 0x1 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - *fill* 0x200008f3 0x1 - .bss.xcpCtoRxStartTime.7655 - 0x200008f4 0x4 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + .bss.xcpCtoRxLength.7660 + 0x200008b0 0x1 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + *fill* 0x200008b1 0x3 + .bss.xcpCtoReqPacket.7659 + 0x200008b4 0x41 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + .bss.xcpCtoRxInProgress.7661 + 0x200008f5 0x1 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + *fill* 0x200008f6 0x2 + .bss.xcpCtoRxStartTime.7662 + 0x200008f8 0x4 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o .bss.assert_failure_line - 0x200008f8 0x4 ..\obj\~#\~#\~#\source\assert.o + 0x200008fc 0x4 ..\obj\~#\~#\~#\source\assert.o .bss.backdoorOpen - 0x200008fc 0x1 ..\obj\~#\~#\~#\source\backdoor.o - *fill* 0x200008fd 0x3 + 0x20000900 0x1 ..\obj\~#\~#\~#\source\backdoor.o + *fill* 0x20000901 0x3 .bss.backdoorOpenTime - 0x20000900 0x4 ..\obj\~#\~#\~#\source\backdoor.o + 0x20000904 0x4 ..\obj\~#\~#\~#\source\backdoor.o .bss.xcpCtoReqPacket.4270 - 0x20000904 0x40 ..\obj\~#\~#\~#\source\com.o - .bss.xcpInfo 0x20000944 0x4c ..\obj\~#\~#\~#\source\xcp.o + 0x20000908 0x40 ..\obj\~#\~#\~#\source\com.o + .bss.xcpInfo 0x20000948 0x4c ..\obj\~#\~#\~#\source\xcp.o *(COMMON) - 0x20000990 __bss_end__ = . + 0x20000994 __bss_end__ = . -.heap 0x20000990 0x0 - 0x20000990 __end__ = . - 0x20000990 end = __end__ +.heap 0x20000998 0x0 + 0x20000998 __end__ = . + 0x20000998 end = __end__ *(.heap*) - .heap 0x20000990 0x0 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o - 0x20000990 __HeapLimit = . + .heap 0x20000998 0x0 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o + 0x20000998 __HeapLimit = . -.stack_dummy 0x20000990 0x800 +.stack_dummy 0x20000998 0x800 *(.stack) - .stack 0x20000990 0x800 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o + .stack 0x20000998 0x800 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o 0x20006000 __StackTop = (ORIGIN (RAM) + LENGTH (RAM)) 0x20005800 __StackLimit = (__StackTop - SIZEOF (.stack_dummy)) 0x20006000 PROVIDE (__stack, __StackTop) @@ -5417,6 +6153,8 @@ LOAD ..\obj\lib\xmclib\src\xmc4_flash.o LOAD ..\obj\lib\xmclib\src\xmc4_gpio.o LOAD ..\obj\lib\xmclib\src\xmc4_rtc.o LOAD ..\obj\lib\xmclib\src\xmc4_scu.o +LOAD ..\obj\lib\xmclib\src\xmc_acmp.o +LOAD ..\obj\lib\xmclib\src\xmc_bccu.o LOAD ..\obj\lib\xmclib\src\xmc_can.o LOAD ..\obj\lib\xmclib\src\xmc_ccu4.o LOAD ..\obj\lib\xmclib\src\xmc_ccu8.o @@ -5425,6 +6163,7 @@ LOAD ..\obj\lib\xmclib\src\xmc_dac.o LOAD ..\obj\lib\xmclib\src\xmc_dma.o LOAD ..\obj\lib\xmclib\src\xmc_dsd.o LOAD ..\obj\lib\xmclib\src\xmc_ebu.o +LOAD ..\obj\lib\xmclib\src\xmc_ecat.o LOAD ..\obj\lib\xmclib\src\xmc_eru.o LOAD ..\obj\lib\xmclib\src\xmc_eth_mac.o LOAD ..\obj\lib\xmclib\src\xmc_fce.o @@ -5433,12 +6172,16 @@ LOAD ..\obj\lib\xmclib\src\xmc_hrpwm.o LOAD ..\obj\lib\xmclib\src\xmc_i2c.o LOAD ..\obj\lib\xmclib\src\xmc_i2s.o LOAD ..\obj\lib\xmclib\src\xmc_ledts.o +LOAD ..\obj\lib\xmclib\src\xmc_math.o +LOAD ..\obj\lib\xmclib\src\xmc_pau.o LOAD ..\obj\lib\xmclib\src\xmc_posif.o +LOAD ..\obj\lib\xmclib\src\xmc_prng.o LOAD ..\obj\lib\xmclib\src\xmc_rtc.o LOAD ..\obj\lib\xmclib\src\xmc_sdmmc.o LOAD ..\obj\lib\xmclib\src\xmc_spi.o LOAD ..\obj\lib\xmclib\src\xmc_uart.o LOAD ..\obj\lib\xmclib\src\xmc_usbd.o +LOAD ..\obj\lib\xmclib\src\xmc_usbh.o LOAD ..\obj\lib\xmclib\src\xmc_usic.o LOAD ..\obj\lib\xmclib\src\xmc_vadc.o LOAD ..\obj\lib\xmclib\src\xmc_wdt.o @@ -5566,76 +6309,76 @@ OUTPUT(..\bin\openblt_xmc4700.elf elf32-littlearm) .comment 0x0000006e 0x6f ..\obj\~#\~#\~#\source\cop.o .comment 0x0000006e 0x6f ..\obj\~#\~#\~#\source\xcp.o -.debug_info 0x00000000 0x8dc3 +.debug_info 0x00000000 0x90ad .debug_info 0x00000000 0x318 ..\obj\hooks.o .debug_info 0x00000318 0x3db ..\obj\led.o - .debug_info 0x000006f3 0x99a ..\obj\lib\system_xmc4700.o - .debug_info 0x0000108d 0xa00 ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_info 0x00001a8d 0x4cf ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_info 0x00001f5c 0x22bb ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_info 0x00004217 0x44b ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_info 0x00004662 0x8c2 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_info 0x00004f24 0xe63 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_info 0x00005d87 0x872 ..\obj\main.o - .debug_info 0x000065f9 0x211 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o - .debug_info 0x0000680a 0x999 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - .debug_info 0x000071a3 0x84 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o - .debug_info 0x00007227 0xa4 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o - .debug_info 0x000072cb 0x228 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o - .debug_info 0x000074f3 0x11f ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o - .debug_info 0x00007612 0x987 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - .debug_info 0x00007f99 0xf2 ..\obj\~#\~#\~#\source\assert.o - .debug_info 0x0000808b 0x114 ..\obj\~#\~#\~#\source\backdoor.o - .debug_info 0x0000819f 0x156 ..\obj\~#\~#\~#\source\boot.o - .debug_info 0x000082f5 0x289 ..\obj\~#\~#\~#\source\com.o - .debug_info 0x0000857e 0xb6 ..\obj\~#\~#\~#\source\cop.o - .debug_info 0x00008634 0x78f ..\obj\~#\~#\~#\source\xcp.o + .debug_info 0x000006f3 0x943 ..\obj\lib\system_xmc4700.o + .debug_info 0x00001036 0xa38 ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_info 0x00001a6e 0x4cf ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_info 0x00001f3d 0x2588 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_info 0x000044c5 0x44b ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_info 0x00004910 0x8fd ..\obj\lib\xmclib\src\xmc_uart.o + .debug_info 0x0000520d 0xe63 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_info 0x00006070 0x872 ..\obj\main.o + .debug_info 0x000068e2 0x211 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o + .debug_info 0x00006af3 0x999 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + .debug_info 0x0000748c 0x84 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o + .debug_info 0x00007510 0xa4 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o + .debug_info 0x000075b4 0x228 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + .debug_info 0x000077dc 0x11f ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o + .debug_info 0x000078fb 0x988 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + .debug_info 0x00008283 0xf2 ..\obj\~#\~#\~#\source\assert.o + .debug_info 0x00008375 0x114 ..\obj\~#\~#\~#\source\backdoor.o + .debug_info 0x00008489 0x156 ..\obj\~#\~#\~#\source\boot.o + .debug_info 0x000085df 0x289 ..\obj\~#\~#\~#\source\com.o + .debug_info 0x00008868 0xb6 ..\obj\~#\~#\~#\source\cop.o + .debug_info 0x0000891e 0x78f ..\obj\~#\~#\~#\source\xcp.o -.debug_abbrev 0x00000000 0x2063 +.debug_abbrev 0x00000000 0x205c .debug_abbrev 0x00000000 0x16d ..\obj\hooks.o .debug_abbrev 0x0000016d 0x188 ..\obj\led.o .debug_abbrev 0x000002f5 0x1c1 ..\obj\lib\system_xmc4700.o - .debug_abbrev 0x000004b6 0x212 ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_abbrev 0x000006c8 0x196 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_abbrev 0x0000085e 0x317 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_abbrev 0x00000b75 0x17e ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_abbrev 0x00000cf3 0x265 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_abbrev 0x00000f58 0x2bc ..\obj\lib\xmclib\src\xmc_usic.o - .debug_abbrev 0x00001214 0x217 ..\obj\main.o - .debug_abbrev 0x0000142b 0xc8 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o - .debug_abbrev 0x000014f3 0x1ff ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - .debug_abbrev 0x000016f2 0x45 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o - .debug_abbrev 0x00001737 0x14 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o - .debug_abbrev 0x0000174b 0xca ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o - .debug_abbrev 0x00001815 0xd4 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o - .debug_abbrev 0x000018e9 0x285 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - .debug_abbrev 0x00001b6e 0xae ..\obj\~#\~#\~#\source\assert.o - .debug_abbrev 0x00001c1c 0x7f ..\obj\~#\~#\~#\source\backdoor.o - .debug_abbrev 0x00001c9b 0x63 ..\obj\~#\~#\~#\source\boot.o - .debug_abbrev 0x00001cfe 0x144 ..\obj\~#\~#\~#\source\com.o - .debug_abbrev 0x00001e42 0x63 ..\obj\~#\~#\~#\source\cop.o - .debug_abbrev 0x00001ea5 0x1be ..\obj\~#\~#\~#\source\xcp.o + .debug_abbrev 0x000004b6 0x221 ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_abbrev 0x000006d7 0x196 ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_abbrev 0x0000086d 0x301 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_abbrev 0x00000b6e 0x17e ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_abbrev 0x00000cec 0x265 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_abbrev 0x00000f51 0x2bc ..\obj\lib\xmclib\src\xmc_usic.o + .debug_abbrev 0x0000120d 0x217 ..\obj\main.o + .debug_abbrev 0x00001424 0xc8 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o + .debug_abbrev 0x000014ec 0x1ff ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + .debug_abbrev 0x000016eb 0x45 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o + .debug_abbrev 0x00001730 0x14 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o + .debug_abbrev 0x00001744 0xca ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + .debug_abbrev 0x0000180e 0xd4 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o + .debug_abbrev 0x000018e2 0x285 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + .debug_abbrev 0x00001b67 0xae ..\obj\~#\~#\~#\source\assert.o + .debug_abbrev 0x00001c15 0x7f ..\obj\~#\~#\~#\source\backdoor.o + .debug_abbrev 0x00001c94 0x63 ..\obj\~#\~#\~#\source\boot.o + .debug_abbrev 0x00001cf7 0x144 ..\obj\~#\~#\~#\source\com.o + .debug_abbrev 0x00001e3b 0x63 ..\obj\~#\~#\~#\source\cop.o + .debug_abbrev 0x00001e9e 0x1be ..\obj\~#\~#\~#\source\xcp.o -.debug_loc 0x00000000 0x3119 +.debug_loc 0x00000000 0x324e .debug_loc 0x00000000 0x2c ..\obj\hooks.o .debug_loc 0x0000002c 0xc4 ..\obj\led.o .debug_loc 0x000000f0 0xa8 ..\obj\lib\system_xmc4700.o - .debug_loc 0x00000198 0x627 ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_loc 0x000007bf 0x298 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_loc 0x00000a57 0xe63 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_loc 0x000018ba 0xef ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_loc 0x000019a9 0x24b ..\obj\lib\xmclib\src\xmc_uart.o - .debug_loc 0x00001bf4 0x580 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_loc 0x00002174 0x6c ..\obj\main.o - .debug_loc 0x000021e0 0xdb ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o - .debug_loc 0x000022bb 0x727 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - .debug_loc 0x000029e2 0xa5 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o - .debug_loc 0x00002a87 0x1e6 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - .debug_loc 0x00002c6d 0x42 ..\obj\~#\~#\~#\source\assert.o - .debug_loc 0x00002caf 0x42 ..\obj\~#\~#\~#\source\com.o - .debug_loc 0x00002cf1 0x428 ..\obj\~#\~#\~#\source\xcp.o + .debug_loc 0x00000198 0x6df ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_loc 0x00000877 0x298 ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_loc 0x00000b0f 0xeb4 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_loc 0x000019c3 0xef ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_loc 0x00001ab2 0x277 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_loc 0x00001d29 0x580 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_loc 0x000022a9 0x6c ..\obj\main.o + .debug_loc 0x00002315 0xdb ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o + .debug_loc 0x000023f0 0x727 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + .debug_loc 0x00002b17 0xa5 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + .debug_loc 0x00002bbc 0x1e6 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + .debug_loc 0x00002da2 0x42 ..\obj\~#\~#\~#\source\assert.o + .debug_loc 0x00002de4 0x42 ..\obj\~#\~#\~#\source\com.o + .debug_loc 0x00002e26 0x428 ..\obj\~#\~#\~#\source\xcp.o -.debug_aranges 0x00000000 0x968 +.debug_aranges 0x00000000 0xa10 .debug_aranges 0x00000000 0x30 ..\obj\hooks.o .debug_aranges @@ -5647,67 +6390,67 @@ OUTPUT(..\bin\openblt_xmc4700.elf elf32-littlearm) .debug_aranges 0x00000188 0x28 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_aranges - 0x000001b0 0x308 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x000001b0 0x3b0 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_aranges - 0x000004b8 0x28 ..\obj\lib\xmclib\src\xmc_gpio.o + 0x00000560 0x28 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_aranges - 0x000004e0 0x50 ..\obj\lib\xmclib\src\xmc_uart.o + 0x00000588 0x50 ..\obj\lib\xmclib\src\xmc_uart.o .debug_aranges - 0x00000530 0x80 ..\obj\lib\xmclib\src\xmc_usic.o + 0x000005d8 0x80 ..\obj\lib\xmclib\src\xmc_usic.o .debug_aranges - 0x000005b0 0x30 ..\obj\main.o + 0x00000658 0x30 ..\obj\main.o .debug_aranges - 0x000005e0 0x38 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o + 0x00000688 0x38 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o .debug_aranges - 0x00000618 0x90 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x000006c0 0x90 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o .debug_aranges - 0x000006a8 0x28 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o + 0x00000750 0x28 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o .debug_aranges - 0x000006d0 0x20 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o + 0x00000778 0x20 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o .debug_aranges - 0x000006f0 0x48 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + 0x00000798 0x48 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o .debug_aranges - 0x00000738 0x38 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o + 0x000007e0 0x38 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o .debug_aranges - 0x00000770 0x40 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + 0x00000818 0x40 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o .debug_aranges - 0x000007b0 0x20 ..\obj\~#\~#\~#\source\assert.o + 0x00000858 0x20 ..\obj\~#\~#\~#\source\assert.o .debug_aranges - 0x000007d0 0x28 ..\obj\~#\~#\~#\source\backdoor.o + 0x00000878 0x28 ..\obj\~#\~#\~#\source\backdoor.o .debug_aranges - 0x000007f8 0x28 ..\obj\~#\~#\~#\source\boot.o + 0x000008a0 0x28 ..\obj\~#\~#\~#\source\boot.o .debug_aranges - 0x00000820 0x50 ..\obj\~#\~#\~#\source\com.o + 0x000008c8 0x50 ..\obj\~#\~#\~#\source\com.o .debug_aranges - 0x00000870 0x28 ..\obj\~#\~#\~#\source\cop.o + 0x00000918 0x28 ..\obj\~#\~#\~#\source\cop.o .debug_aranges - 0x00000898 0xd0 ..\obj\~#\~#\~#\source\xcp.o + 0x00000940 0xd0 ..\obj\~#\~#\~#\source\xcp.o -.debug_ranges 0x00000000 0x7e8 +.debug_ranges 0x00000000 0x890 .debug_ranges 0x00000000 0x20 ..\obj\hooks.o .debug_ranges 0x00000020 0x20 ..\obj\led.o .debug_ranges 0x00000040 0x38 ..\obj\lib\system_xmc4700.o .debug_ranges 0x00000078 0xd0 ..\obj\lib\xmclib\src\xmc4_flash.o .debug_ranges 0x00000148 0x18 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_ranges 0x00000160 0x2f8 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_ranges 0x00000458 0x18 ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_ranges 0x00000470 0x40 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_ranges 0x000004b0 0x70 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_ranges 0x00000520 0x20 ..\obj\main.o - .debug_ranges 0x00000540 0x28 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o - .debug_ranges 0x00000568 0x80 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - .debug_ranges 0x000005e8 0x18 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o - .debug_ranges 0x00000600 0x38 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o - .debug_ranges 0x00000638 0x28 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o - .debug_ranges 0x00000660 0x30 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - .debug_ranges 0x00000690 0x10 ..\obj\~#\~#\~#\source\assert.o - .debug_ranges 0x000006a0 0x18 ..\obj\~#\~#\~#\source\backdoor.o - .debug_ranges 0x000006b8 0x18 ..\obj\~#\~#\~#\source\boot.o - .debug_ranges 0x000006d0 0x40 ..\obj\~#\~#\~#\source\com.o - .debug_ranges 0x00000710 0x18 ..\obj\~#\~#\~#\source\cop.o - .debug_ranges 0x00000728 0xc0 ..\obj\~#\~#\~#\source\xcp.o + .debug_ranges 0x00000160 0x3a0 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_ranges 0x00000500 0x18 ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_ranges 0x00000518 0x40 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_ranges 0x00000558 0x70 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_ranges 0x000005c8 0x20 ..\obj\main.o + .debug_ranges 0x000005e8 0x28 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o + .debug_ranges 0x00000610 0x80 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + .debug_ranges 0x00000690 0x18 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o + .debug_ranges 0x000006a8 0x38 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + .debug_ranges 0x000006e0 0x28 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o + .debug_ranges 0x00000708 0x30 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + .debug_ranges 0x00000738 0x10 ..\obj\~#\~#\~#\source\assert.o + .debug_ranges 0x00000748 0x18 ..\obj\~#\~#\~#\source\backdoor.o + .debug_ranges 0x00000760 0x18 ..\obj\~#\~#\~#\source\boot.o + .debug_ranges 0x00000778 0x40 ..\obj\~#\~#\~#\source\com.o + .debug_ranges 0x000007b8 0x18 ..\obj\~#\~#\~#\source\cop.o + .debug_ranges 0x000007d0 0xc0 ..\obj\~#\~#\~#\source\xcp.o -.debug_macro 0x00000000 0x1c2a1 +.debug_macro 0x00000000 0x1c234 .debug_macro 0x00000000 0x23f ..\obj\hooks.o .debug_macro 0x0000023f 0x892 ..\obj\hooks.o .debug_macro 0x00000ad1 0x1c ..\obj\hooks.o @@ -5737,141 +6480,141 @@ OUTPUT(..\bin\openblt_xmc4700.elf elf32-littlearm) .debug_macro 0x000015fe 0x30d ..\obj\hooks.o .debug_macro 0x0000190b 0x10 ..\obj\hooks.o .debug_macro 0x0000191b 0x35 ..\obj\hooks.o - .debug_macro 0x00001950 0x162 ..\obj\hooks.o - .debug_macro 0x00001ab2 0x2d ..\obj\hooks.o - .debug_macro 0x00001adf 0x3b ..\obj\hooks.o - .debug_macro 0x00001b1a 0x50 ..\obj\hooks.o - .debug_macro 0x00001b6a 0xe66 ..\obj\hooks.o - .debug_macro 0x000029d0 0x16 ..\obj\hooks.o - .debug_macro 0x000029e6 0x166f2 ..\obj\hooks.o - .debug_macro 0x000190d8 0x12 ..\obj\hooks.o - .debug_macro 0x000190ea 0x4c ..\obj\hooks.o - .debug_macro 0x00019136 0x22 ..\obj\hooks.o - .debug_macro 0x00019158 0xd4d ..\obj\hooks.o - .debug_macro 0x00019ea5 0xba ..\obj\hooks.o - .debug_macro 0x00019f5f 0x23f ..\obj\led.o - .debug_macro 0x0001a19e 0x317 ..\obj\lib\system_xmc4700.o - .debug_macro 0x0001a4b5 0x4c ..\obj\lib\system_xmc4700.o - .debug_macro 0x0001a501 0x8d ..\obj\lib\system_xmc4700.o - .debug_macro 0x0001a58e 0x4a ..\obj\lib\system_xmc4700.o - .debug_macro 0x0001a5d8 0x35 ..\obj\lib\system_xmc4700.o - .debug_macro 0x0001a60d 0x23d ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_macro 0x0001a84a 0xda ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_macro 0x0001a924 0x24c ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_macro 0x0001ab70 0x274 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_macro 0x0001ade4 0x240 ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_macro 0x0001b024 0x25e ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x0001b282 0x28 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x0001b2aa 0x249 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_macro 0x0001b4f3 0x257 ..\obj\main.o - .debug_macro 0x0001b74a 0xa3 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o - .debug_macro 0x0001b7ed 0x262 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - .debug_macro 0x0001ba4f 0x91 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o - .debug_macro 0x0001bae0 0x9b ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o - .debug_macro 0x0001bb7b 0xa9 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o - .debug_macro 0x0001bc24 0x241 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - .debug_macro 0x0001be65 0x91 ..\obj\~#\~#\~#\source\assert.o - .debug_macro 0x0001bef6 0x97 ..\obj\~#\~#\~#\source\backdoor.o - .debug_macro 0x0001bf8d 0x91 ..\obj\~#\~#\~#\source\boot.o - .debug_macro 0x0001c01e 0x9b ..\obj\~#\~#\~#\source\com.o - .debug_macro 0x0001c0b9 0x91 ..\obj\~#\~#\~#\source\cop.o - .debug_macro 0x0001c14a 0x157 ..\obj\~#\~#\~#\source\xcp.o + .debug_macro 0x00001950 0x16e ..\obj\hooks.o + .debug_macro 0x00001abe 0x2d ..\obj\hooks.o + .debug_macro 0x00001aeb 0x3b ..\obj\hooks.o + .debug_macro 0x00001b26 0x50 ..\obj\hooks.o + .debug_macro 0x00001b76 0xe66 ..\obj\hooks.o + .debug_macro 0x000029dc 0x16 ..\obj\hooks.o + .debug_macro 0x000029f2 0x165d5 ..\obj\hooks.o + .debug_macro 0x00018fc7 0x19 ..\obj\hooks.o + .debug_macro 0x00018fe0 0x4c ..\obj\hooks.o + .debug_macro 0x0001902c 0x22 ..\obj\hooks.o + .debug_macro 0x0001904e 0xdc4 ..\obj\hooks.o + .debug_macro 0x00019e12 0xba ..\obj\hooks.o + .debug_macro 0x00019ecc 0x23f ..\obj\led.o + .debug_macro 0x0001a10b 0x317 ..\obj\lib\system_xmc4700.o + .debug_macro 0x0001a422 0x4c ..\obj\lib\system_xmc4700.o + .debug_macro 0x0001a46e 0x8d ..\obj\lib\system_xmc4700.o + .debug_macro 0x0001a4fb 0x4a ..\obj\lib\system_xmc4700.o + .debug_macro 0x0001a545 0x35 ..\obj\lib\system_xmc4700.o + .debug_macro 0x0001a57a 0x23d ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_macro 0x0001a7b7 0xdd ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_macro 0x0001a894 0x24c ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_macro 0x0001aae0 0x297 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_macro 0x0001ad77 0x240 ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_macro 0x0001afb7 0x25e ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x0001b215 0x28 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x0001b23d 0x249 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_macro 0x0001b486 0x257 ..\obj\main.o + .debug_macro 0x0001b6dd 0xa3 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o + .debug_macro 0x0001b780 0x262 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + .debug_macro 0x0001b9e2 0x91 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o + .debug_macro 0x0001ba73 0x9b ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + .debug_macro 0x0001bb0e 0xa9 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o + .debug_macro 0x0001bbb7 0x241 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + .debug_macro 0x0001bdf8 0x91 ..\obj\~#\~#\~#\source\assert.o + .debug_macro 0x0001be89 0x97 ..\obj\~#\~#\~#\source\backdoor.o + .debug_macro 0x0001bf20 0x91 ..\obj\~#\~#\~#\source\boot.o + .debug_macro 0x0001bfb1 0x9b ..\obj\~#\~#\~#\source\com.o + .debug_macro 0x0001c04c 0x91 ..\obj\~#\~#\~#\source\cop.o + .debug_macro 0x0001c0dd 0x157 ..\obj\~#\~#\~#\source\xcp.o -.debug_line 0x00000000 0x53ef +.debug_line 0x00000000 0x55bf .debug_line 0x00000000 0x468 ..\obj\hooks.o .debug_line 0x00000468 0x473 ..\obj\led.o - .debug_line 0x000008db 0x3f0 ..\obj\lib\system_xmc4700.o - .debug_line 0x00000ccb 0x66f ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_line 0x0000133a 0x508 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_line 0x00001842 0xcf3 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_line 0x00002535 0x4fe ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_line 0x00002a33 0x518 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_line 0x00002f4b 0x5ce ..\obj\lib\xmclib\src\xmc_usic.o - .debug_line 0x00003519 0x49b ..\obj\main.o - .debug_line 0x000039b4 0x13f ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o - .debug_line 0x00003af3 0x64f ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - .debug_line 0x00004142 0x136 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o - .debug_line 0x00004278 0xf3 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o - .debug_line 0x0000436b 0x16c ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o - .debug_line 0x000044d7 0x13a ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o - .debug_line 0x00004611 0x500 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - .debug_line 0x00004b11 0x106 ..\obj\~#\~#\~#\source\assert.o - .debug_line 0x00004c17 0x121 ..\obj\~#\~#\~#\source\backdoor.o - .debug_line 0x00004d38 0x118 ..\obj\~#\~#\~#\source\boot.o - .debug_line 0x00004e50 0x187 ..\obj\~#\~#\~#\source\com.o - .debug_line 0x00004fd7 0x10e ..\obj\~#\~#\~#\source\cop.o - .debug_line 0x000050e5 0x30a ..\obj\~#\~#\~#\source\xcp.o + .debug_line 0x000008db 0x3e8 ..\obj\lib\system_xmc4700.o + .debug_line 0x00000cc3 0x691 ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_line 0x00001354 0x508 ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_line 0x0000185c 0xe9b ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_line 0x000026f7 0x4fe ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_line 0x00002bf5 0x526 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_line 0x0000311b 0x5ce ..\obj\lib\xmclib\src\xmc_usic.o + .debug_line 0x000036e9 0x49b ..\obj\main.o + .debug_line 0x00003b84 0x13f ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o + .debug_line 0x00003cc3 0x64f ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + .debug_line 0x00004312 0x136 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o + .debug_line 0x00004448 0xf3 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cstart.o + .debug_line 0x0000453b 0x16c ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + .debug_line 0x000046a7 0x13a ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o + .debug_line 0x000047e1 0x500 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + .debug_line 0x00004ce1 0x106 ..\obj\~#\~#\~#\source\assert.o + .debug_line 0x00004de7 0x121 ..\obj\~#\~#\~#\source\backdoor.o + .debug_line 0x00004f08 0x118 ..\obj\~#\~#\~#\source\boot.o + .debug_line 0x00005020 0x187 ..\obj\~#\~#\~#\source\com.o + .debug_line 0x000051a7 0x10e ..\obj\~#\~#\~#\source\cop.o + .debug_line 0x000052b5 0x30a ..\obj\~#\~#\~#\source\xcp.o -.debug_str 0x00000000 0x82de4 - .debug_str 0x00000000 0x7b1f7 ..\obj\hooks.o - 0x7b411 (size before relaxing) - .debug_str 0x0007b1f7 0xd7 ..\obj\led.o - 0x7b49e (size before relaxing) - .debug_str 0x0007b2ce 0xe64 ..\obj\lib\system_xmc4700.o - 0x75a23 (size before relaxing) - .debug_str 0x0007c132 0x1221 ..\obj\lib\xmclib\src\xmc4_flash.o - 0x76ba5 (size before relaxing) - .debug_str 0x0007d353 0x49b ..\obj\lib\xmclib\src\xmc4_gpio.o - 0x7b919 (size before relaxing) - .debug_str 0x0007d7ee 0x24ed ..\obj\lib\xmclib\src\xmc4_scu.o - 0x78172 (size before relaxing) - .debug_str 0x0007fcdb 0x8c ..\obj\lib\xmclib\src\xmc_gpio.o - 0x7b794 (size before relaxing) - .debug_str 0x0007fd67 0x15bb ..\obj\lib\xmclib\src\xmc_uart.o - 0x77507 (size before relaxing) - .debug_str 0x00081322 0x975 ..\obj\lib\xmclib\src\xmc_usic.o - 0x77d6e (size before relaxing) - .debug_str 0x00081c97 0x70 ..\obj\main.o - 0x7c776 (size before relaxing) - .debug_str 0x00081d07 0x1c9 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o +.debug_str 0x00000000 0x83226 + .debug_str 0x00000000 0x7afe2 ..\obj\hooks.o + 0x7b207 (size before relaxing) + .debug_str 0x0007afe2 0xd7 ..\obj\led.o + 0x7b294 (size before relaxing) + .debug_str 0x0007b0b9 0xe2a ..\obj\lib\system_xmc4700.o + 0x75489 (size before relaxing) + .debug_str 0x0007bee3 0x1207 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x76652 (size before relaxing) + .debug_str 0x0007d0ea 0x49b ..\obj\lib\xmclib\src\xmc4_gpio.o + 0x7b70f (size before relaxing) + .debug_str 0x0007d585 0x2b47 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x7826c (size before relaxing) + .debug_str 0x000800cc 0x8c ..\obj\lib\xmclib\src\xmc_gpio.o + 0x7b58a (size before relaxing) + .debug_str 0x00080158 0x1612 ..\obj\lib\xmclib\src\xmc_uart.o + 0x76f97 (size before relaxing) + .debug_str 0x0008176a 0x96f ..\obj\lib\xmclib\src\xmc_usic.o + 0x777e4 (size before relaxing) + .debug_str 0x000820d9 0x70 ..\obj\main.o + 0x7c5a9 (size before relaxing) + .debug_str 0x00082149 0x1c9 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o 0x2fb6 (size before relaxing) - .debug_str 0x00081ed0 0x3f9 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - 0x76965 (size before relaxing) - .debug_str 0x000822c9 0x2e ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o + .debug_str 0x00082312 0x3f9 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + 0x76432 (size before relaxing) + .debug_str 0x0008270b 0x2e ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o 0x2e08 (size before relaxing) - .debug_str 0x000822f7 0x47 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + .debug_str 0x00082739 0x47 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o 0x2ed9 (size before relaxing) - .debug_str 0x0008233e 0x121 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o + .debug_str 0x00082780 0x121 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o 0x2f04 (size before relaxing) - .debug_str 0x0008245f 0x23a ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - 0x76cb5 (size before relaxing) - .debug_str 0x00082699 0x4d ..\obj\~#\~#\~#\source\assert.o + .debug_str 0x000828a1 0x23a ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + 0x767bf (size before relaxing) + .debug_str 0x00082adb 0x4d ..\obj\~#\~#\~#\source\assert.o 0x2e3a (size before relaxing) - .debug_str 0x000826e6 0x86 ..\obj\~#\~#\~#\source\backdoor.o + .debug_str 0x00082b28 0x86 ..\obj\~#\~#\~#\source\backdoor.o 0x2e76 (size before relaxing) - .debug_str 0x0008276c 0x32 ..\obj\~#\~#\~#\source\boot.o + .debug_str 0x00082bae 0x32 ..\obj\~#\~#\~#\source\boot.o 0x2e4f (size before relaxing) - .debug_str 0x0008279e 0x102 ..\obj\~#\~#\~#\source\com.o + .debug_str 0x00082be0 0x102 ..\obj\~#\~#\~#\source\com.o 0x2f61 (size before relaxing) - .debug_str 0x000828a0 0x19 ..\obj\~#\~#\~#\source\cop.o + .debug_str 0x00082ce2 0x19 ..\obj\~#\~#\~#\source\cop.o 0x2e06 (size before relaxing) - .debug_str 0x000828b9 0x52b ..\obj\~#\~#\~#\source\xcp.o + .debug_str 0x00082cfb 0x52b ..\obj\~#\~#\~#\source\xcp.o 0x33fc (size before relaxing) -.debug_frame 0x00000000 0x1588 +.debug_frame 0x00000000 0x16ec .debug_frame 0x00000000 0x58 ..\obj\hooks.o .debug_frame 0x00000058 0x48 ..\obj\led.o .debug_frame 0x000000a0 0x94 ..\obj\lib\system_xmc4700.o .debug_frame 0x00000134 0x264 ..\obj\lib\xmclib\src\xmc4_flash.o .debug_frame 0x00000398 0x4c ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_frame 0x000003e4 0x6ec ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_frame 0x00000ad0 0x48 ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_frame 0x00000b18 0x98 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_frame 0x00000bb0 0x158 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_frame 0x00000d08 0x64 ..\obj\main.o - .debug_frame 0x00000d6c 0x74 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o - .debug_frame 0x00000de0 0x1a8 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o - .debug_frame 0x00000f88 0x30 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o - .debug_frame 0x00000fb8 0xa0 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o - .debug_frame 0x00001058 0x60 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o - .debug_frame 0x000010b8 0xa0 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o - .debug_frame 0x00001158 0x28 ..\obj\~#\~#\~#\source\assert.o - .debug_frame 0x00001180 0x40 ..\obj\~#\~#\~#\source\backdoor.o - .debug_frame 0x000011c0 0x40 ..\obj\~#\~#\~#\source\boot.o - .debug_frame 0x00001200 0xa0 ..\obj\~#\~#\~#\source\com.o - .debug_frame 0x000012a0 0x40 ..\obj\~#\~#\~#\source\cop.o - .debug_frame 0x000012e0 0x214 ..\obj\~#\~#\~#\source\xcp.o - .debug_frame 0x000014f4 0x28 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-exit.o) - .debug_frame 0x0000151c 0x2c c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-init.o) - .debug_frame 0x00001548 0x20 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-memset.o) - .debug_frame 0x00001568 0x20 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libnosys_s.a(_exit.o) + .debug_frame 0x000003e4 0x850 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_frame 0x00000c34 0x48 ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_frame 0x00000c7c 0x98 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_frame 0x00000d14 0x158 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_frame 0x00000e6c 0x64 ..\obj\main.o + .debug_frame 0x00000ed0 0x74 ..\obj\~#\~#\~#\source\armcm4_xmc4\cpu.o + .debug_frame 0x00000f44 0x1a8 ..\obj\~#\~#\~#\source\armcm4_xmc4\flash.o + .debug_frame 0x000010ec 0x30 ..\obj\~#\~#\~#\source\armcm4_xmc4\gcc\cpu_comp.o + .debug_frame 0x0000111c 0xa0 ..\obj\~#\~#\~#\source\armcm4_xmc4\nvm.o + .debug_frame 0x000011bc 0x60 ..\obj\~#\~#\~#\source\armcm4_xmc4\timer.o + .debug_frame 0x0000121c 0xa0 ..\obj\~#\~#\~#\source\armcm4_xmc4\uart.o + .debug_frame 0x000012bc 0x28 ..\obj\~#\~#\~#\source\assert.o + .debug_frame 0x000012e4 0x40 ..\obj\~#\~#\~#\source\backdoor.o + .debug_frame 0x00001324 0x40 ..\obj\~#\~#\~#\source\boot.o + .debug_frame 0x00001364 0xa0 ..\obj\~#\~#\~#\source\com.o + .debug_frame 0x00001404 0x40 ..\obj\~#\~#\~#\source\cop.o + .debug_frame 0x00001444 0x214 ..\obj\~#\~#\~#\source\xcp.o + .debug_frame 0x00001658 0x28 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-exit.o) + .debug_frame 0x00001680 0x2c c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-init.o) + .debug_frame 0x000016ac 0x20 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-memset.o) + .debug_frame 0x000016cc 0x20 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libnosys_s.a(_exit.o) diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/bin/openblt_xmc4700.srec b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/bin/openblt_xmc4700.srec index bb6018ab..a3d7dfee 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/bin/openblt_xmc4700.srec +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/bin/openblt_xmc4700.srec @@ -1,57 +1,57 @@ S01E00002E2E5C62696E5C6F70656E626C745F786D63343730302E7372656353 -S3150800000000600020151200085B1200085D12000847 -S315080000105F12000861120008631200080000000061 -S315080000200000000000000000000000006512000843 -S315080000306712000800000000691200086B12000829 -S315080000406F12000871120008731200087512000872 -S3150800005077120008791200087B1200087D12000842 -S315080000607F120008000000000000000000000000E9 -S31508000070811200080000000083120008851200089B -S3150800008087120008891200088B1200088D120008D2 -S315080000908F120008911200089312000895120008A2 -S315080000A097120008991200089B1200089D12000872 -S315080000B09F120008A1120008A3120008A512000842 -S315080000C0A7120008A9120008AB120008AD12000812 -S315080000D0AF120008B1120008B3120008B5120008E2 -S315080000E0B7120008B9120008BB120008BD120008B2 -S315080000F0BF120008C1120008C3120008C512000882 -S31508000100C7120008C9120008CB120008CD12000851 -S31508000110CF120008D1120008D3120008D512000821 -S31508000120D7120008D9120008DB120008DD120008F1 -S31508000130DF120008E1120008E3120008E5120008C1 -S31508000140E7120008E9120008EB120008ED12000891 -S31508000150EF120008F1120008F3120008F512000861 +S3150800000000600020191200085F120008611200083B +S315080000106312000865120008671200080000000055 +S31508000020000000000000000000000000691200083F +S315080000306B120008000000006D1200086F1200081D +S315080000407312000875120008771200087912000862 +S315080000507B1200087D1200087F1200088112000832 +S3150800006083120008000000000000000000000000E5 +S31508000070851200080000000087120008891200088F +S315080000808B1200088D1200088F12000891120008C2 +S315080000909312000895120008971200089912000892 +S315080000A09B1200089D1200089F120008A112000862 +S315080000B0A3120008A5120008A7120008A912000832 +S315080000C0AB120008AD120008AF120008B112000802 +S315080000D0B3120008B5120008B7120008B9120008D2 +S315080000E0BB120008BD120008BF120008C1120008A2 +S315080000F0C3120008C5120008C7120008C912000872 +S31508000100CB120008CD120008CF120008D112000841 +S31508000110D3120008D5120008D7120008D912000811 +S31508000120DB120008DD120008DF120008E1120008E1 +S31508000130E3120008E5120008E7120008E9120008B1 +S31508000140EB120008ED120008EF120008F112000881 +S31508000150F3120008F5120008F7120008F912000851 S315080001600000000000000000000000000000000081 -S31508000170F7120008F9120008FB120008FD12000821 -S31508000180FF120008011300080313000805130008EE -S3150800019007130008091300080B1300080D130008BD -S315080001A00F1300081113000813130008151300088D -S315080001B017130008191300081B1300081D1300085D -S315080001C01F1300082113000823130008251300082D -S315080001D027130008291300082B1300080000000045 -S315080001E02D1300082F1300083113000833130008D5 -S315080001F0351300080000000037130008000000004F +S31508000170FB120008FD120008FF1200080113000810 +S3150800018003130008051300080713000809130008DD +S315080001900B1300080D1300080F13000811130008AD +S315080001A0131300081513000817130008191300087D +S315080001B01B1300081D1300081F130008211300084D +S315080001C0231300082513000827130008291300081D +S315080001D02B1300082D1300082F1300080000000039 +S315080001E031130008331300083513000837130008C5 +S315080001F039130008000000003B1300080000000047 S3150800020010B5054C237833B9044B13B10448AFF342 S3150800021000800123237010BD80000020000000002C -S31508000220B81C0008084B10B51BB108490848AFF3BD +S31508000220981C0008084B10B51BB108490848AFF3DD S3150800023000800848036803B910BD074B002BFBD0A4 S31508000240BDE81040184700BF0000000084000020E9 -S31508000250B81C00086C00002000000000154B002B9D +S31508000250981C00086C00002000000000154B002BBD S3150800026008BF134B9D46A3F5803A00218B460F46DF S315080002701348144A121A01F053FC0F4B002B00D0F6 S3150800028098470E4B002B00D0984700200021040009 S315080002900D000D48002802D00C48AFF3008001F08D -S315080002A019FC2000290000F069FD01F0FFFB00BFE2 +S315080002A019FC2000290000F06BFD01F0FFFB00BFE0 S315080002B000000800006000200000000000000000A8 -S315080002C080000020900900200000000000000000C7 +S315080002C080000020940900200000000000000000C3 S315080002D008B500F045F8044B5B6A13F4005F01D1DA S315080002E0002008BD012008BD008F024808B564201B S315080002F000F006F808BD00BF08B500F007F808BD0D S31508000300014B1880704700BFA000002008B501F017 -S315080003105DF80F4B1B68984218D30E4B1B783BB9F8 +S315080003105FF80F4B1B68984218D30E4B1B783BB9F6 S3150800032001220C4B1A704FF400720B4B5A6006E010 S315080003300022084B1A704FF00072074B5A6001F002 -S3150800034045F8064B1B881844014B186008BD00BFCA +S3150800034047F8064B1B881844014B186008BD00BFC8 S315080003509C000020A200002000850248A000002082 S315080003604FF00072014B5A60704700BF0085024883 S3150800037082B00023019303E000BF019B0133019380 @@ -69,48 +69,48 @@ S31508000420022208E00C4B9B6803F07F030133B0FB04 S31508000430F3F200E0094A0749C868C0B20130B2FBC6 S31508000440F0F3086900F001000130B3FBF0F0044B4B S31508000450186010BD004600501047005000366E0167 -S315080004606C00002070B55F4B9A6842F04D029A60A6 -S315080004704D22DA60A0331B6813F0010F09D15A4ADE -S31508000480536843F001035360574B1B6813F0010F81 -S31508000490FAD0564B1B6813F4007F08D0534A93686A -S315080004A043F40073936041F64C50FFF761FF504CDC -S315080004B0636843F40023636040F6C410FFF758FFEF -S315080004C0636823F4803323F002036360494B5B6857 -S315080004D013F0300F24D0103C636823F030036360B8 -S315080004E0FFF776FF444BA3FB00231B0D013B626815 -S315080004F042EA034363603E4BDA6822F00102DA609F -S315080005005A6822F400325A60394B1B6803F4607348 -S31508000510B3F5607FF8D1334A936823F001039360FB -S31508000520334B5A6842F001025A605A6842F0100288 -S315080005305A60324A9A605A6842F040025A605A68CB -S3150800054022F010025A605A6842F480225A60284BF8 -S315080005501B6813F0040FFAD0254A536823F00103E9 -S315080005605360234B1B6813F0010FFAD11D4A936899 -S3150800057023F004039360224C4FF00113E360002636 -S3150800058066612661266266620323E3611D4BA361E9 -S315080005901D4BA362164D6B6823F040036B601B4B23 -S315080005A0AB604FF41660FFF7E3FE194BAB604FF4F0 -S315080005B06160FFF7DDFE174BAB604FF49650FFF70F -S315080005C0D7FE154BAB6041F27070FFF7D1FE134BA7 -S315080005D0AB604FF4E150FFF7CBFE6660FFF7FCFE19 -S315080005E070BD00BF604100500042005000440050FA -S315080005F010470050004700506BCA5F6B002F0B0175 -S31508000600004600500500010003002001002F0501E7 -S31508000610002F0301002F0201002F0101002F000106 -S3150800062010B54FF00053044C0FCB84E80F00FFF7CA -S31508000630ADFEFFF717FF10BD700000205022014BDA -S315080006401A6070475455000C024B18600433196041 -S31508000650704700BFF055000C10B4064AAA23136071 -S31508000660552405490C60A021116003605DF8044B10 -S31508000670704700BF5455000CA8AA000C30B4074BAD -S31508000680AA241C60064A5521116080251D601C603D -S3150800069011603023036030BC704700BF5455000C0E -S315080006A0A8AA000CF522014B1A6070475455000C95 -S315080006B041F21003014AD058704700BF0010005895 -S315080006C070B506460D46FFF7EDFFFFF7B7FF0024A6 -S315080006D007E0631C55F8231055F82400FFF7B4FF0C -S315080006E002343F2CF5D93046FFF7B6FF70BD00BF80 -S315080006F010B50446FFF7D6FF2046FFF7BFFF10BD2B +S315080004606C00002070B5574B1B6813F0010F09D1BB +S31508000470544A536843F001035360524B1B6813F008 +S31508000480010FFAD0504B1B6813F4007F08D04E4A70 +S31508000490936843F40073936041F64C50FFF768FF86 +S315080004A04A4C636843F40023636040F6C410FFF7C0 +S315080004B05FFF636823F4803323F002036360444BD1 +S315080004C05B6813F0300F21D0103C636823F4702367 +S315080004D023F030036360FFF77BFF3E4BA3FB00234B +S315080004E01B0D013B626842EA03436360374BDA68D7 +S315080004F022F00102DA605A6822F400325A60334B5D +S315080005001B6803F46073B3F5607FF8D12F4B5A6804 +S3150800051042F001025A605A6842F010025A602E4AA6 +S315080005209A605A6842F040025A605A6822F01002ED +S315080005305A605A6842F480225A60244B1B6813F0AA +S31508000540040FFAD0214A536823F0010353601F4B66 +S315080005501B6813F0010FFAD1204C4FF00113E3602A +S31508000560002666612661266266620323E3611C4BE8 +S31508000570A3611C4BA362154D6B6823F040036B60A7 +S31508000580194BAB604FF41660FFF7F2FE174BAB60E2 +S315080005904FF46160FFF7ECFE154BAB604FF49650D5 +S315080005A0FFF7E6FE134BAB6041F27070FFF7E0FE13 +S315080005B0114BAB604FF4E150FFF7DAFE6660FFF7C8 +S315080005C00BFF70BD00420050004400501047005019 +S315080005D0004700506BCA5F6B002F0B0100460050A6 +S315080005E00500010003002001002F0501002F03016B +S315080005F0002F0201002F0101002F000110B54FF056 +S315080006000053044C0FCB84E80F00FFF7BFFEFFF73B +S3150800061029FF10BD700000205022014B1A60704758 +S315080006205455000C024B186004331960704700BF1C +S31508000630F055000C10B4064AAA2313605524054940 +S315080006400C60A021116003605DF8044B704700BF81 +S315080006505455000CA8AA000C30B4074BAA241C60F9 +S31508000660064A5521116080251D601C6011603023E3 +S31508000670036030BC704700BF5455000CA8AA000C94 +S31508000680F522014B1A6070475455000C41F21003CD +S31508000690014AD058704700BF0010005870B506468A +S315080006A00D46FFF7EDFFFFF7B7FF002407E0631CD1 +S315080006B055F8231055F82400FFF7B4FF02343F2CF1 +S315080006C0F5D93046FFF7B6FF41F21003024AD35870 +S315080006D013F0010FF8D170BD0010005810B504468C +S315080006E0FFF7CEFF2046FFF7B7FF41F21003034A94 +S315080006F0D35813F0010FF8D110BD00BF00100058F1 S31508000700F8B504460D461646624B98422FD003F5B7 S31508000710807398422BD003F58073984227D003F54F S315080007208073984223D003F5807398421FD003F54F @@ -137,11 +137,11 @@ S315080008600705AD000720A84027EA000044F8210044 S3150800087054F82170307A00FA05F53D4344F82150C2 S31508000880043354F82300317801FA02F2024344F89B S315080008902320F8BD008002484C1B0008008E024841 -S315080008A0020F20F07040034B53F8222013681843B8 -S315080008B0106070477C1B0008034B1868034B5B6984 +S315080008A0030F20F0704003EB43039A00014BD0502E +S315080008B0704700BF14440050034B1868034B5B692C S315080008C003F00103D84070476C0000200046005032 -S315080008D0020F20F07040034B53F822201368184388 -S315080008E0106070476C1B000870B504460E46154626 +S315080008D0030F20F0704003EB43039A00014BD050FE +S315080008E0704700BF4846005070B504460E46154688 S315080008F0494B98422FD003F5807398422BD003F5C5 S315080009008073984227D003F58073984223D003F565 S31508000910807398421FD003F5807398421BD003F565 @@ -160,139 +160,139 @@ S315080009D0012308E0012306E0012304E0012302E0E5 S315080009E0012300E000231BB944210C4800F0CCFD8C S315080009F0B308043354F8231006F00306F600F82269 S31508000A00B24021EA020244F8232054F82320B540D4 -S31508000A10154344F8235070BD008002488C1B00081B -S31508000A2070B505460E4600F0FBF8F47904B91024B3 -S31508000A3022463168284600F045F8B379013B640838 -S31508000A400134240244EA430343F00103EB63337998 -S31508000A50013B1B0643F481736B6373792BB16A6B95 -S31508000A60013B42EA03436B6305E06A6B3379013B5A -S31508000A7042EA03436B634FF4A063AB634FF0FF3363 -S31508000A80EB6433892B6470BDD0F8083113F0E06F3E -S31508000A9009D1836B13F0800FFBD14FF40053C36465 -S31508000AA0C0F880107047C0F880117047D0F80C3134 -S31508000AB013F0E06F02D1406D80B27047D0F81C0188 -S31508000AC080B2704763293BD9002A3BD02DE9F04113 -S31508000AD015460C460646FFF7EFFE1B49A1FB0037F5 -S31508000AE07F09A1FB0431480940F2FF3E4FF0010C93 -S31508000AF0E046714611E007FB01F300FB05F2B3FB84 -S31508000B00F2F39C0AC3F30903B4F5806F04D29E4539 -S31508000B1002D99E46A446884601390029EBD148F4F5 -S31508000B20004333617269094B1340013D43EA85234B -S31508000B300CF1FF3C43EA0C4373610020BDE8F081E9 -S31508000B4001207047012070471F85EB51EF8000FC9C -S31508000B5030B4D0F8084124F0E064C0F80841D0F871 -S31508000B600851064C2C4041EA032343EA026244EA50 -S31508000B700203C0F8083130BC704700BFC0C0FFF898 -S31508000B8030B4D0F80C4124F0E064C0F80C41D0F839 -S31508000B900C51074C2C4041EA032343EA026244EA1B -S31508000BA0020343F08053C0F80C3130BC704700BFD5 -S31508000BB0C0C0FFEF10B5144B984208D14FF400603F -S31508000BC0FFF786FE4FF40060FFF76AFE10BD0F4B75 -S31508000BD0984207D10E4C2046FFF77AFE2046FFF7CB -S31508000BE05FFE10BD0B4B984207D10B4C2046FFF712 -S31508000BF06FFE2046FFF754FE10BD40F24B11074822 -S31508000C0000F0C2FC10BD00BF0800034008000248FF -S31508000C10800000100840024800010010AC1B0008C4 -S31508000C2010B504462F4B984205D003F50073984239 -S31508000C3003D1012302E0012300E0002343B92A4B34 -S31508000C409C4207D003F500739C4205D1012304E0BA -S31508000C50012302E0012300E0002343B9234B9C4211 -S31508000C6007D003F500739C4205D1012304E0012354 -S31508000C7002E0012300E000231BB951211C4800F0C3 -S31508000C8083FC184B9C4203D003F500739C4203D1A6 -S31508000C901848FFF78FFF19E0134B9C4203D003F562 -S31508000CA000739C4203D11448FFF784FF0EE00F4BF4 -S31508000CB09C4203D003F500739C4203D10F48FFF70B -S31508000CC079FF03E065210A4800F05EFC0323E36030 -S31508000CD0E36813F0010FFBD0236C23F00F032364A2 -S31508000CE010BD00BF00000340000002480040024853 -S31508000CF0AC1B0008080003400800024808400248E8 -S31508000D0010B5802209210748FFF7EEFD064C0022A0 -S31508000D100D212046FFF7E8FD236E23F400532366D2 -S31508000D2010BD00BF00850248008F024870B586B026 -S31508000D3000238DF80C300126049602258DF81450F0 -S31508000D400C4C03AA04212046FFF7DAFC90238DF801 -S31508000D50003001968DF808506A4605212046FFF7AF -S31508000D60CFFC054AD36923F007033343D36106B0A2 -S31508000D7070BD00BF008102480000034008B5FFF7B8 -S31508000D80BFFF00F035FCFFF7D1FF00F03FFCFCE7A2 -S31508000D9008B500F03BFA08BD10B500F0DDFAA0B1C1 -S31508000DA0FFF796FA88B100F059FC00F0E7FA00F070 -S31508000DB0D7FA20F0604020F07F00044B186000F05E -S31508000DC0CFFA446800F024FAA04710BD08ED00E009 -S31508000DD070B508E0461C4D1C0B78037000F06CFCDF -S31508000DE0224630462946531E9CB2002AF2D170BDCF -S31508000DF0030E082B01D100F18060704738B505460F -S31508000E00002419E000F058FC04EB440293000C4A55 -S31508000E10D358AB420ED804EB44018A0008490A4469 -S31508000E20526813449D4205D204EB440083000B44E8 -S31508000E30187A38BD0134E4B20E2CE3D9FF2038BD48 -S31508000E40CC1B000838B50546002410E000F034FC39 -S31508000E5004EB44029300084A13441B7AAB4204D1BC -S31508000E6004EB44018B00D05838BD0134E4B20E2C93 -S31508000E70ECD94FF0FF3038BDCC1B000808B5C1F3DC -S31508000E80090353B90368994209D040F8041B4FF483 -S31508000E908062FFF79DFF012008BD002008BD0120E4 -S31508000EA008BD00BF2DE9F04106460068FFF7A6FF1A -S31508000EB0FF2833D000272CE000F0FEFB35683C0203 -S31508000EC025443444043400F081FA00F10D08214623 -S31508000ED02846FFF7F5FB05E000F078FA804520D3B1 -S31508000EE000F0EAFBFFF7E4FB00F0010010F0FF0F4B -S31508000EF0F2D1FFF7DDFB30F0100315D1002305E032 -S31508000F005A5DD2B2E15C8A4211D10133FF2BF7D97F -S31508000F100137032FD0D90120BDE8F0810020BDE8B4 -S31508000F20F0810020BDE8F0810020BDE8F0810020B6 -S31508000F30BDE8F08138B50D460B4B984207D00446FC -S31508000F400A4B994205D0FFF7ADFF18B908E0084CDF -S31508000F5000E0054C29462046FFF790FF10B938BD3A -S31508000F60002038BD204638BDA40000200040000CF3 -S31508000F70A80400202DE9F04106460C4617461D46F2 -S31508000F8021F47F7828F003080368B3F1FF3F04D102 -S31508000F904146FFF773FF034630B33368984505D0DB -S31508000FA041463046FFF7C6FF0646D0B13368E41A15 -S31508000FB03444043400F080FB331DE31AB3F5806F24 -S31508000FC007D308F580613046FFF7B4FF064650B1EF -S31508000FD0041D17F8013B04F8013B013DEAD1012342 -S31508000FE002E0002300E000231846BDE8F08100BFB8 -S31508000FF0884230D8F8B505460E4670B30F2926D96B -S315080010002DE000F059FB2846FFF71CFF0746B0F114 -S31508001010FF3F26D000F0DAF900F5CE5408343846FA -S31508001020FFF766FB05E000F0D1F984421BD300F018 -S3150800103043FBFFF73DFB00F0010010F0FF0FF2D174 -S31508001040FFF736FB30F020030FD10135EDB2B5427C -S31508001050D7D90120F8BD002070470020F8BD002030 -S31508001060F8BD0020F8BD0020F8BD0020F8BD00BF7F -S315080010704FF0FF33024A1360024A1360704700BFFD -S31508001080A8040020A400002070B50D461646FFF7F8 -S31508001090AFFE0446FFF7B2FEFF281AD060190138E2 -S315080010A0FFF7ACFEFF2816D024F47F7323F0030362 -S315080010B00A4A934206D12B46324621460848FFF78C -S315080010C059FF70BD2B46324621460648FFF752FFA8 -S315080010D070BD002070BD002070BD00BF0040000C30 -S315080010E0A4000020A804002070B50C46FFF780FE77 -S315080010F00646FFF783FE054630190138FFF77EFEE0 -S31508001100FF2D06D0FF2806D001462846FFF770FFB8 -S3150800111070BD002070BD002070BD00BF114B1B685C -S31508001120B3F1FF3F18D000B583B00E4B59689A68E3 -S315080011301144DA6811441A6911445A6911449A69C2 -S315080011401144DA698B18DB4302AA42F8043D0421EC -S315080011500548FFF799FF01E00120704703B05DF8E5 -S3150800116004FB00BFA40000200042000C0E4B1A68C6 -S3150800117004331B6813440D4A126813440C4A126858 -S3150800118013440C4A126813440B4A126813440B4A58 -S3150800119012681344DB430A4A1268934201D10120BC -S315080011A070470020704700BF0040000C0840000C44 -S315080011B00C40000C1040000C1440000C1840000CA9 -S315080011C00042000C08B50D4B1B68B3F1FF3F04D075 -S315080011D00A48FFF767FE034668B1094B1B68B3F177 -S315080011E0FF3F05D00648FFF75DFE034610B902E04B -S315080011F0012300E00123184608BD00BFA400002013 -S31508001200A8040020004870470040000C72B67047DA -S3150800121062B670470649074A074B9A42BEBF51F85D -S31508001220040B42F8040BF8E70448804704480047D3 -S31508001230C41C0008000000206C00002021060008DD -S315080012405D0200083C493D4A002301E041F8043BA1 -S315080012509142FBD3FFF792FDFEE7FEE7FEE7FEE7C6 +S31508000A10154344F8235070BD008002486C1B00083B +S31508000A2070B505460E4600F0FDF8F47904B91024B1 +S31508000A3022463168284600F047F8B379013B640836 +S31508000A400134240244EA430343F4403343F00103E8 +S31508000A50EB633379013B1B0643F481736B6373794C +S31508000A602BB16A6B013B42EA03436B6305E06A6B91 +S31508000A703379013B42EA03436B634FF4A063AB63EC +S31508000A804FF0FF33EB6433892B6470BDD0F808311F +S31508000A9013F0E06F09D1836B13F0800FFBD14FF48D +S31508000AA00053C364C0F880107047C0F880117047BF +S31508000AB0D0F80C3113F0E06F02D1406D80B2704768 +S31508000AC0D0F81C0180B2704763293BD9002A3BD075 +S31508000AD02DE9F04115460C460646FFF7EDFE1B4983 +S31508000AE0A1FB00377F09A1FB0431480940F2FF3E0C +S31508000AF04FF0010CE046714611E007FB01F300FBDD +S31508000B0005F2B3FBF2F39C0AC3F30903B4F5806F4D +S31508000B1004D29E4502D99E46A44688460139002934 +S31508000B20EBD148F4004333617269094B1340013D28 +S31508000B3043EA85230CF1FF3C43EA0C43736100202A +S31508000B40BDE8F08101207047012070471F85EB51F1 +S31508000B50EF8000FC30B4D0F8084124F0E064C0F817 +S31508000B600841D0F80851064C2C4041EA032343EAD1 +S31508000B70026244EA0203C0F8083130BC704700BF7D +S31508000B80C0C0FFF830B4D0F80C4124F0E064C0F8D7 +S31508000B900C41D0F80C51074C2C4041EA032343EA98 +S31508000BA0026244EA020343F08053C0F80C3130BCB9 +S31508000BB0704700BFC0C0FFEF10B5144B984208D16C +S31508000BC04FF40060FFF784FE4FF40060FFF768FEFD +S31508000BD010BD0F4B984207D10E4C2046FFF778FE02 +S31508000BE02046FFF75DFE10BD0B4B984207D10B4C14 +S31508000BF02046FFF76DFE2046FFF752FE10BD40F275 +S31508000C004B11074800F0C0FC10BD00BF08000340A8 +S31508000C100800024880000010084002480001001041 +S31508000C208C1B000810B504462F4B984205D003F5D7 +S31508000C300073984203D1012302E0012300E0002358 +S31508000C4043B92A4B9C4207D003F500739C4205D151 +S31508000C50012304E0012302E0012300E0002343B955 +S31508000C60234B9C4207D003F500739C4205D1012310 +S31508000C7004E0012302E0012300E000231BB951210F +S31508000C801C4800F081FC184B9C4203D003F5007306 +S31508000C909C4203D11848FFF78FFF19E0134B9C427B +S31508000CA003D003F500739C4203D11448FFF784FF71 +S31508000CB00EE00F4B9C4203D003F500739C4203D110 +S31508000CC00F48FFF779FF03E065210A4800F05CFC4E +S31508000CD00323E360E36813F0010FFBD0236C23F0D2 +S31508000CE00F03236410BD00BF000003400000024844 +S31508000CF0004002488C1B0008080003400800024810 +S31508000D000840024810B5802209210748FFF7ECFD84 +S31508000D10064C00220D212046FFF7E6FD236E23F43C +S31508000D200053236610BD00BF00850248008F0248A5 +S31508000D3070B586B000238DF80C300126049602257E +S31508000D408DF814500C4C03AA04212046FFF7D8FC52 +S31508000D5090238DF8003001968DF808506A460521D3 +S31508000D602046FFF7CDFC054AD36923F00703334332 +S31508000D70D36106B070BD00BF008102480000034081 +S31508000D8008B5FFF7BFFF00F033FCFFF7D1FF00F00F +S31508000D903DFCFCE708B500F03BFA08BD10B500F0CD +S31508000DA0DDFAA0B1FFF794FA88B100F057FC00F01D +S31508000DB0E7FA00F0D7FA20F0604020F07F00044BF5 +S31508000DC0186000F0CFFA446800F024FAA04710BD76 +S31508000DD008ED00E070B508E0461C4D1C0B78037062 +S31508000DE000F06AFC224630462946531E9CB2002A69 +S31508000DF0F2D170BD030E082B01D100F18060704757 +S31508000E0038B50546002419E000F056FC04EB440208 +S31508000E1093000C4AD358AB420ED804EB44018A001F +S31508000E2008490A44526813449D4205D204EB44001B +S31508000E3083000B44187A38BD0134E4B20E2CE3D98A +S31508000E40FF2038BDAC1B000838B50546002410E065 +S31508000E5000F032FC04EB44029300084A13441B7A60 +S31508000E60AB4204D104EB44018B00D05838BD0134A1 +S31508000E70E4B20E2CECD94FF0FF3038BDAC1B00089D +S31508000E8008B5C1F3090353B90368994209D040F874 +S31508000E90041B4FF48062FFF79DFF012008BD002068 +S31508000EA008BD012008BD00BF2DE9F04106460068CF +S31508000EB0FFF7A6FFFF2833D000272CE000F0FCFB45 +S31508000EC035683C0225443444043400F081FA00F1C4 +S31508000ED00D0821462846FFF7E1FB05E000F078FA01 +S31508000EE0804520D300F0E8FBFFF7D0FB00F00100B7 +S31508000EF010F0FF0FF2D1FFF7C9FB30F0100315D140 +S31508000F00002305E05A5DD2B2E15C8A4211D1013371 +S31508000F10FF2BF7D90137032FD0D90120BDE8F0817F +S31508000F200020BDE8F0810020BDE8F0810020BDE882 +S31508000F30F0810020BDE8F08138B50D460B4B98428C +S31508000F4007D004460A4B994205D0FFF7ADFF18B9FA +S31508000F5008E0084C00E0054C29462046FFF790FFBC +S31508000F6010B938BD002038BD204638BDA400002081 +S31508000F700040000CA80400202DE9F04106460C4666 +S31508000F8017461D4621F47F7828F003080368B3F155 +S31508000F90FF3F04D14146FFF773FF034630B333687A +S31508000FA0984505D041463046FFF7C6FF0646D0B1FC +S31508000FB03368E41A3444043400F07EFB331DE31A24 +S31508000FC0B3F5806F07D308F580613046FFF7B4FFA5 +S31508000FD0064650B1041D17F8013B04F8013B013DD4 +S31508000FE0EAD1012302E0002300E000231846BDE809 +S31508000FF0F08100BF884230D8F8B505460E4670B372 +S315080010000F2926D92DE000F057FB2846FFF71CFFCD +S315080010100746B0F1FF3F26D000F0DAF900F5CE54C6 +S3150800102008343846FFF75AFB05E000F0D1F9844248 +S315080010301BD300F041FBFFF729FB00F0010010F07D +S31508001040FF0FF2D1FFF722FB30F020030FD1013555 +S31508001050EDB2B542D7D90120F8BD0020704700206F +S31508001060F8BD0020F8BD0020F8BD0020F8BD00201E +S31508001070F8BD00BF4FF0FF33024A1360024A1360FF +S31508001080704700BFA8040020A400002070B50D46D4 +S315080010901646FFF7AFFE0446FFF7B2FEFF281AD042 +S315080010A060190138FFF7ACFEFF2816D024F47F73C9 +S315080010B023F003030A4A934206D12B4632462146B9 +S315080010C00848FFF759FF70BD2B46324621460648A9 +S315080010D0FFF752FF70BD002070BD002070BD00BF35 +S315080010E00040000CA4000020A804002070B50C469F +S315080010F0FFF780FE0646FFF783FE054630190138DE +S31508001100FFF77EFEFF2D06D0FF2806D001462846AB +S31508001110FFF770FF70BD002070BD002070BD00BFD6 +S31508001120114B1B68B3F1FF3F18D000B583B00E4BC7 +S3150800113059689A681144DA6811441A6911445A6957 +S3150800114011449A691144DA698B18DB4302AA42F8FA +S31508001150043D04210548FFF799FF01E00120704787 +S3150800116003B05DF804FB00BFA40000200042000C99 +S315080011700E4B1A6804331B6813440D4A126813444D +S315080011800C4A126813440C4A126813440B4A126834 +S3150800119013440B4A12681344DB430A4A1268934203 +S315080011A001D1012070470020704700BF0040000CA5 +S315080011B00840000C0C40000C1040000C1440000CB9 +S315080011C01840000C0042000C08B50D4B1B68B3F123 +S315080011D0FF3F04D00A48FFF767FE034668B1094B8C +S315080011E01B68B3F1FF3F05D00648FFF75DFE0346CF +S315080011F010B902E0012300E00123184608BD00BF2C +S31508001200A4000020A8040020004870470040000CF5 +S3150800121072B6704762B670470649074A074B9A4244 +S31508001220BEBF51F8040B42F8040BF8E704488047A0 +S3150800123004480047A41C0008000000206C00002099 +S31508001240FD0500085D0200083C493D4A002301E00F +S3150800125041F8043B9142FBD3FFF792FDFEE7FEE718 S31508001260FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE748 S31508001270FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE738 S31508001280FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE728 @@ -306,57 +306,57 @@ S315080012F0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7B8 S31508001300FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7A7 S31508001310FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE797 S31508001320FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE787 -S31508001330FEE7FEE7FEE7FEE78000002090090020B2 -S3150800134008B5FFF795FE08BD08B5FFF79DFE08BD71 -S3150800135008B5FFF7C9FE08BD08B5FFF707FF08BDC2 -S3150800136008B5FFF74FFF08BD08B5FFF7D7FE0346D8 -S3150800137010B1FFF727FF0346184608BD0022014BA8 -S315080013801A60704710E000E008B5FFF7F7FF054B55 -S31508001390054A5A6000229A6005211960034B1A60B3 -S315080013A008BD00BF10E000E07F320200AC08002054 -S315080013B0044B1B6813F4803F03D0034A13680133B8 -S315080013C01360704710E000E0AC08002008B5FFF78E -S315080013D0EFFF014B186808BDAC08002008B50D4B97 -S315080013E0D3F8143113F4805F12D101460948FFF788 -S315080013F04BFB084BD3F8143113F4807FF9D0054A18 -S31508001400D2F8183143F48073C2F81831012008BDA8 +S31508001330FEE7FEE7FEE7FEE7FEE7FEE780000020A1 +S315080013409409002008B5FFF795FE08BD08B5FFF714 +S315080013509DFE08BD08B5FFF7C9FE08BD08B5FFF72D +S3150800136007FF08BD08B5FFF74FFF08BD08B5FFF72B +S31508001370D7FE034610B1FFF727FF0346184608BDF8 +S315080013800022014B1A60704710E000E008B5FFF72D +S31508001390F7FF054B054A5A6000229A600521196035 +S315080013A0034B1A6008BD00BF10E000E07F32020060 +S315080013B0AC080020044B1B6813F4803F03D0034A93 +S315080013C0136801331360704710E000E0AC08002092 +S315080013D008B5FFF7EFFF014B186808BDAC080020F9 +S315080013E008B50C4BD3F8143113F4805F10D10146BD +S315080013F00848FFF74BFB074BD3F8143113F4807FEB +S31508001400F9D04FF48072034BC3F81821012008BDA8 S31508001410002008BD00000340074BD3F8143113F031 -S31508001420080F07D110B504460348FFF73FFB2070A5 +S31508001420080F07D110B504460348FFF741FB2070A3 S31508001430012010BD0020704700000340F0B585B0BC S315080014404FF46143019308238DF808308DF809306D S3150800145001258DF80A5010278DF80B700026ADF877 S315080014600C600C4C01A92046FFF7DAFA2B46042239 -S3150800147039462046FFF76CFB2B46042231462046A8 -S31508001480FFF77EFB236C23F00F0343F0020323646C +S3150800147039462046FFF76EFB2B46042231462046A6 +S31508001480FFF780FB236C23F00F0343F0020323646A S3150800149005B0F0BD0000034070B506460D4640296C -S315080014A003D972210F4800F06FF82846FFF796FF18 +S315080014A003D972210F4800F06FF82846FFF798FF16 S315080014B0012803D076210B4800F066F800240CE0DA -S315080014C000F0FAF8305DFFF789FF012803D07F2185 +S315080014C000F0FAF8305DFFF78BFF012803D07F2183 S315080014D0044800F059F80134A4B2ABB29C42EFD3E9 -S315080014E070BD00BF801C000838B5224B1C789CB91B +S315080014E070BD00BF601C000838B5224B1C789CB93B S315080014F02148FFF791FF01283AD11F4B1B78002B93 -S3150800150031D0FFF763FF1D4B186000221C4B1A7081 +S3150800150031D0FFF765FF1D4B186000221C4B1A707F S315080015100122184B1A702BE00546194B1B7801332C S3150800152015481844FFF778FF0446012810D1144BD4 S315080015301A780132D2B21A700F4B1B789A4214D11C -S3150800154010492846FFF744FC00220A4B1A700FE0A0 -S31508001550FFF73CFF094B1B686433984207D9002400 +S3150800154010492846FFF746FC00220A4B1A700FE09E +S31508001550FFF73EFF094B1B686433984207D90024FE S31508001560044B1C7004E01C4602E0002400E0002442 -S31508001570204638BDF2080020B0080020F4080020F4 -S31508001580F1080020B108002008B5024B196000F0E8 -S3150800159093F8FCE7F808002008B500F085F801285C -S315080015A010D0094B1B78012B0CD1FFF70FFF074B07 +S31508001570204638BDF5080020B4080020F8080020E9 +S31508001580B0080020B508002008B5024B196000F025 +S3150800159093F8FCE7FC08002008B500F085F8012858 +S315080015A010D0094B1B78012B0CD1FFF711FF074B05 S315080015B01B6803F5FA73984204D30022024B1A708B -S315080015C0FFF7EAFB08BD00BFFC0800200009002061 -S315080015D008B50122044B1A70FFF7F8FE034B186092 -S315080015E0FFF7DAFF08BD00BFFC080020000900204D -S315080015F008B5FFF7CDFB00F05BF8FFF7C5FEFFF770 -S315080016009FFE00F00DF8FFF7E3FF08BD08B500F0F0 -S3150800161053F8FFF7CDFE00F00FF8FFF7BDFF08BD42 +S315080015C0FFF7ECFB08BD00BF000900200409002056 +S315080015D008B50122044B1A70FFF7FAFE034B186090 +S315080015E0FFF7DAFF08BD00BF000900200409002044 +S315080015F008B5FFF7CFFB00F05BF8FFF7C7FEFFF76C +S31508001600A1FE00F00DF8FFF7E3FF08BD08B500F0EE +S3150800161053F8FFF7CFFE00F00FF8FFF7BDFF08BD40 S3150800162008B500F0B5F9FFF709FF0022014B1A705B S3150800163008BD00BF0000002008B50648FFF754FFA4 S31508001640012805D10022044B1A70024800F0BEF9A1 -S3150800165008BD00BF0409002000000020704700BF35 +S3150800165008BD00BF0809002000000020704700BF31 S3150800166008B5044B1B7813B9C9B2FFF715FF00F08C S31508001670A5F908BD00000020044B1B78013B022B8E S3150800168001D9402070470020704700BF00000020A5 @@ -365,53 +365,53 @@ S315080016A0704700BF0000002008B500F07FF908BDAC S315080016B008B5FEF71BFE08BD08B5FEF71DFE08BDFA S315080016C010B4002304E010F8011B0B44DBB22146DA S315080016D04C1E0029F7D1136001205DF8044B7047B2 -S315080016E00022014B5A70704744090020034BFE2222 -S315080016F0DA7018710222A3F84420704744090020C2 +S315080016E00022014B5A70704748090020034BFE221E +S315080016F0DA7018710222A3F84420704748090020BE S3150800170010B5054C00232370FFF7EAFFFF23E370AB -S315080017100123A4F8443010BD44090020064BFF22DB +S315080017100123A4F8443010BD48090020064BFF22D7 S31508001720DA7000221A71597859719A71DA711A7237 -S315080017300622A3F8442070474409002008B5002073 +S315080017300622A3F8442070474809002008B500206F S31508001740FFF7D4FF08BD00BF084BFF22DA70084A2E S315080017509A6400221A715A719A710721D9711A72FC -S315080017605A729A720822A3F8442070474409002046 -S31508001770A81C0008044BFF22DA7042689A6401220A -S31508001780A3F84420704700BF4409002010B5084C50 +S315080017605A729A720822A3F8442070474809002042 +S31508001770881C0008044BFF22DA7042689A6401222A +S31508001780A3F84420704700BF4809002010B5084C4C S31508001790FF23E370E21D4168A06CFFF791FF2071FB S315080017A000236371A3710823A4F8443010BD00BF59 -S315080017B04409002008B53120FFF798FF08BD00BF8F +S315080017B04809002008B53120FFF798FF08BD00BF8B S315080017C038B5084CFF23E370002525716571FFF7CE S315080017D053FFA071E571257265720723A4F844309A -S315080017E038BD00BF4409002038B5FFF779FF0D4C16 +S315080017E038BD00BF4809002038B5FFF779FF0D4C12 S315080017F001252570FF23E3701023237100236371ED S31508001800FFF73AFFA071FFF743FFE071FFF740FFCC S31508001810C0F3072020726572A5720823A4F8443025 -S3150800182038BD00BF4409002038B505464478FFF79F +S3150800182038BD00BF4809002038B505464478FFF79B S3150800183023FF0138844203DD2220FFF757FF38BD16 -S31508001840084C6A78A16C201DFFF7C2FAFF23E370E3 +S31508001840084C6A78A16C201DFFF7C4FAFF23E370E1 S315080018506B78A26C1344A3646B780133A4F8443004 -S3150800186038BD00BF4409002038B504464578FFF75F +S3150800186038BD00BF4809002038B504464578FFF75B S3150800187003FF0138854203DD2220FFF737FF38BD15 -S315080018806168084DA9646278281DFFF7A1FAFF234D +S315080018806168084DA9646278281DFFF7A3FAFF234B S31508001890EB706378AA6C1344AB6463780133A5F8DC -S315080018A0443038BD4409002038B505460D4B9C6CBC -S315080018B0FFF7E2FE6A1C411E2046FFF745FD18B9F0 +S315080018A0443038BD4809002038B505460D4B9C6CB8 +S315080018B0FFF7E2FE6A1C411E2046FFF747FD18B9EE S315080018C03120FFF713FF38BD064CFF23E370FFF7FF S315080018D0D3FE0138A36C1844A0640123A4F844304D -S315080018E038BD00BF4409002038B504464578FFF7DF +S315080018E038BD00BF4809002038B504464578FFF7DB S315080018F0C3FE0238854203DD2220FFF7F7FE38BD16 S315080019000F4BFF22DA700122A3F84420617831B91F -S31508001910FFF72AFD90B93120FFF7E8FE38BDA21C73 -S31508001920074B986CFFF710FD18B93120FFF7DEFE5C +S31508001910FFF72CFD90B93120FFF7E8FE38BDA21C71 +S31508001920074B986CFFF712FD18B93120FFF7DEFE5A S3150800193038BD6378024A916C0B44936438BD00BF86 -S315080019404409002008B54168074B986CFFF700FD6D +S315080019404809002008B54168074B986CFFF702FD67 S3150800195018B93120FFF7CAFE08BD034BFF22DA701B -S315080019600122A3F8442008BD4409002008B5FFF762 -S3150800197013FA034BFF22DA700122A3F8442008BDAC -S315080019804409002008B589B2FFF76AFE08BD00BF02 +S315080019600122A3F8442008BD4809002008B5FFF75E +S3150800197015FA034BFF22DA700122A3F8442008BDAA +S315080019804809002008B589B2FFF76AFE08BD00BFFE S31508001990054B00221A709A6483F84320A3F8442062 -S315080019A09A705A70704700BF44090020024B187895 -S315080019B000B10120704700BF440900200022024BF5 -S315080019C083F84320704700BF4409002008B5037810 +S315080019A09A705A70704700BF48090020024B187891 +S315080019B000B10120704700BF480900200022024BF1 +S315080019C083F84320704700BF4809002008B503780C S315080019D0FF2B02D1FFF708FF50E0334A1278012A9D S315080019E060D1C93B352B46D8DFE803F0334545427D S315080019F045453F363C3945454545454545454545B3 @@ -425,10 +425,10 @@ S31508001A60AFFE0BE0FFF76EFF08E0FFF77FFF05E02C S31508001A70FFF7A0FE02E02020FFF738FE0A4B93F896 S31508001A804330012B02D11020FFF730FE064BB3F985 S31508001A904410002906DD1846012380F84330033038 -S31508001AA0FFF770FF08BD00BF4409002008B5074BC3 +S31508001AA0FFF770FF08BD00BF4809002008B5074BBF S31508001AB0044613B10021AFF30080054B1868836A0A S31508001AC003B19847204600F033F800BF0000000035 -S31508001AD0B41C000870B50E4B0E4CE41AA410002571 +S31508001AD0941C000870B50E4B0E4CE41AA410002591 S31508001AE01E46A54204D056F8253098470135F8E732 S31508001AF000F020F8084C094BE41AA41000251E46ED S31508001B00A54204D056F8253098470135F8E770BD48 @@ -437,36 +437,34 @@ S31508001B2002440346934202D003F8011BFAE77047C2 S31508001B30FEE70000F8B500BFF8BC08BC9E46704733 S31508001B40F8B500BFF8BC08BC9E4670472E2E5C6CE4 S31508001B5069625C786D636C69625C7372635C786DEC -S31508001B6063345F6770696F2E630000004846005053 -S31508001B7054460050604600506C46005014440050CD -S31508001B80204400502C440050384400502E2E5C6CE3 +S31508001B6063345F6770696F2E630000002E2E5C6C0D +S31508001B7069625C786D636C69625C7372635C786DCC +S31508001B80635F6770696F2E63000000002E2E5C6C21 S31508001B9069625C786D636C69625C7372635C786DAC -S31508001BA0635F6770696F2E63000000002E2E5C6C01 -S31508001BB069625C786D636C69625C7372635C786D8C -S31508001BC0635F757369632E63000000000040000CB4 -S31508001BD000400000010000000080000C00400000EA -S31508001BE00200000000C0000C0040000003000000D6 -S31508001BF00000010C00400000040000000040010C39 -S31508001C0000400000050000000080010C00400000B4 -S31508001C100600000000C0010C00400000070000009C -S31508001C200000020C00000200080000000000040C7E -S31508001C3000000400090000000000080C0000040071 -S31508001C400A00000000000C0C000004000B00000055 -S31508001C500000100C000004000C0000000000140C2A -S31508001C60000004000D0000000000180C000004002D -S31508001C700E00000000001C0C000004000F0000000D -S31508001C802E2E5C2E2E5C2E2E5C2E2E5C536F7572BD -S31508001C9063655C41524D434D345F584D43345C7522 -S31508001CA06172742E630000004F70656E424C5400DA -S31108001CB0430000000400002000000000B3 -S30D08001CBCA0E5FF7F010000000E -S31508001CC404000000000000000000000000000000FE +S31508001BA0635F757369632E63000000000040000CD4 +S31508001BB000400000010000000080000C004000000A +S31508001BC00200000000C0000C0040000003000000F6 +S31508001BD00000010C00400000040000000040010C59 +S31508001BE000400000050000000080010C00400000D5 +S31508001BF00600000000C0010C0040000007000000BD +S31508001C000000020C00000200080000000000040C9E +S31508001C1000000400090000000000080C0000040091 +S31508001C200A00000000000C0C000004000B00000075 +S31508001C300000100C000004000C0000000000140C4A +S31508001C40000004000D0000000000180C000004004D +S31508001C500E00000000001C0C000004000F0000002D +S31508001C602E2E5C2E2E5C2E2E5C2E2E5C536F7572DD +S31508001C7063655C41524D434D345F584D43345C7542 +S31508001C806172742E630000004F70656E424C5400FA +S31108001C90430000000400002000000000D3 +S30D08001C9CC0E5FF7F010000000E +S31508001CA4040000000000000000000000000000001E +S31508001CB40000000000000000000000000000000012 +S31508001CC400000000901C000800000000000000004E S31508001CD400000000000000000000000000000000F2 -S31508001CE400000000B01C000800000000000000000E +S31508001CE400000000000000000000000000000000E2 S31508001CF400000000000000000000000000000000D2 -S31508001D0400000000000000000000000000000000C1 -S31508001D1400000000000000000000000000000000B1 -S31108001D240000000025020008010200086B -S31508001D300000000000000000000000000000000095 -S30908001D400000000091 +S31108001D040000000025020008010200088B +S31508001D1000000000000000000000000000000000B5 +S30908001D2000000000B1 S70508000000F2 diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/ide/xmc4700.depend b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/ide/xmc4700.depend index f198f302..9816c7d3 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/ide/xmc4700.depend +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/ide/xmc4700.depend @@ -1064,60 +1064,60 @@ "led.h" "xmc_gpio.h" -1477087008 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\system_xmc4700.c +1477087956 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\system_xmc4700.c "system_XMC4700.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmc4700.h +1473064960 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmc4700.h "core_cm4.h" "system_XMC4700.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\cmsis\core_cm4.h +1465289978 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\cmsis\core_cm4.h "core_cmInstr.h" "core_cmFunc.h" "core_cmSimd.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\cmsis\core_cminstr.h - - - +1465289978 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\cmsis\core_cminstr.h + "cmsis_armcc.h" + "cmsis_armcc_V6.h" + "cmsis_gcc.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\cmsis\cmsis_gcc.h +1465289978 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\cmsis\cmsis_gcc.h -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\cmsis\core_cmfunc.h - - - +1465289978 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\cmsis\core_cmfunc.h + "cmsis_armcc.h" + "cmsis_armcc_V6.h" + "cmsis_gcc.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\cmsis\core_cmsimd.h - - - +1465289978 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\cmsis\core_cmsimd.h + "cmsis_armcc.h" + "cmsis_armcc_V6.h" + "cmsis_gcc.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\system_xmc4700.h +1468487305 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\system_xmc4700.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc4_eru.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc4_eru.c "xmc_eru.h" "xmc_scu.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_eru.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_eru.h "xmc_common.h" "xmc1_eru_map.h" "xmc4_eru_map.h" -1476977853 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_common.h +1477088188 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_common.h @@ -1126,9 +1126,10 @@ "boot.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_device.h +1469781874 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_device.h "XMC4500.h" "XMC4400.h" + "XMC4300.h" "XMC4200.h" "XMC4100.h" "XMC4700.h" @@ -1138,251 +1139,251 @@ "XMC1300.h" "XMC1400.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_eru_map.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_eru_map.h -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_scu.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_scu.h -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_scu.h +1467383079 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_scu.h "xmc_common.h" -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc4_flash.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc4_flash.c "xmc_flash.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_flash.h +1471242129 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_flash.h "xmc_common.h" "xmc1_flash.h" "xmc4_flash.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_flash.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_flash.h "xmc_common.h" -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc4_gpio.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc4_gpio.c "xmc_gpio.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_gpio.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_gpio.h "xmc_common.h" "xmc1_gpio.h" "xmc4_gpio.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_gpio.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_gpio.h "xmc_common.h" "xmc4_gpio_map.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_gpio_map.h +1471903247 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_gpio_map.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc4_rtc.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc4_rtc.c -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_rtc.h +1467378878 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_rtc.h "xmc1_rtc.h" "xmc4_rtc.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_rtc.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_rtc.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc4_scu.c +1467379907 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc4_scu.c -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_can.c +1467378878 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_can.c "xmc_can.h" "xmc_scu.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_can.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_can.h "xmc_common.h" "xmc_scu.h" "xmc_can_map.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_can_map.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_can_map.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_ccu4.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_ccu4.c "xmc_ccu4.h" "xmc_scu.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_ccu4.h +1467378878 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_ccu4.h "xmc_common.h" "xmc1_ccu4_map.h" "xmc4_ccu4_map.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_ccu4_map.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_ccu4_map.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_ccu8.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_ccu8.c "xmc_ccu8.h" "xmc_scu.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_ccu8.h +1467378878 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_ccu8.h "xmc_common.h" "xmc1_ccu8_map.h" "xmc4_ccu8_map.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_ccu8_map.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_ccu8_map.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_common.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_common.c "xmc_common.h" -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_dac.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_dac.c -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_dac.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_dac.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_dma.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_dma.c "xmc_dma.h" "xmc_scu.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_dma.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_dma.h "xmc_common.h" "xmc_dma_map.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_dma_map.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_dma_map.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_dsd.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_dsd.c "xmc_dsd.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_dsd.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_dsd.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_ebu.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_ebu.c -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_ebu.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_ebu.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_eru.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_eru.c "xmc_eru.h" -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_eth_mac.c +1472543436 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_eth_mac.c -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_eth_mac.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_eth_mac.h "xmc_common.h" "xmc_eth_mac_map.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_eth_mac_map.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_eth_mac_map.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_fce.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_fce.c -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_fce.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_fce.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_gpio.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_gpio.c -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_hrpwm.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_hrpwm.c -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_hrpwm.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_hrpwm.h -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_hrpwm_map.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_hrpwm_map.h "xmc_hrpwm.h" -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_i2c.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_i2c.c -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_i2c.h +1471939947 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_i2c.h "xmc_usic.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_usic.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_usic.h "xmc_common.h" "xmc1_usic_map.h" "xmc4_usic_map.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_usic_map.h +1469014921 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc4_usic_map.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_i2s.c +1469450032 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_i2s.c -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_i2s.h +1468425037 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_i2s.h "xmc_usic.h" -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_ledts.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_ledts.c "xmc_scu.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_ledts.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_ledts.h "xmc_scu.h" -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_posif.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_posif.c -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_posif.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_posif.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_rtc.c +1467378878 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_rtc.c "xmc_scu.h" "xmc_rtc.h" -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_sdmmc.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_sdmmc.c "xmc_sdmmc.h" "xmc_scu.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_sdmmc.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_sdmmc.h "xmc_common.h" -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_spi.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_spi.c -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_spi.h +1467378878 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_spi.h "xmc_usic.h" -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_uart.c +1469448524 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_uart.c -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_uart.h +1467378878 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_uart.h "xmc_usic.h" -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_usbd.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_usbd.c -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_usbd.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_usbd.h "xmc_common.h" "xmc_usbd_regs.h" "xmc_scu.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_usbd_regs.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_usbd_regs.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_usic.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_usic.c "xmc_usic.h" "xmc_scu.h" -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_vadc.c +1470204802 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_vadc.c -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_vadc.h +1470205055 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_vadc.h -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_vadc_map.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_vadc_map.h -1447665730 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_wdt.c +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_wdt.c "xmc_wdt.h" "xmc_scu.h" -1447665730 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_wdt.h +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_wdt.h "xmc_common.h" "xmc_scu.h" @@ -1458,3 +1459,56 @@ 1476787063 source:c:\work\software\openblt\target\source\xcp.c "boot.h" +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_acmp.c + + +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_acmp.h + + +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_bccu.c + + + +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_bccu.h + + +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_ecat.c + + + +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_ecat.h + "xmc_common.h" + "xmc_ecat_map.h" + +1469014958 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_ecat_map.h + +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_math.c + + +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_math.h + + + +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_pau.c + "xmc_pau.h" + +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_pau.h + "xmc_common.h" + +1470204177 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_prng.c + "xmc_prng.h" + +1470204177 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_prng.h + "xmc_common.h" + +1473236602 source:c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\src\xmc_usbh.c + + + "xmc_usbh.h" + +1473236602 c:\work\software\openblt\target\demo\armcm4_xmc4_xcm4700_relax_kit_gcc\boot\lib\xmclib\inc\xmc_usbh.h + + "xmc_common.h" + "xmc_scu.h" + "xmc_gpio.h" + diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/ide/xmc4700.ebp b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/ide/xmc4700.ebp index 0f2cc4f6..768a0433 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/ide/xmc4700.ebp +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/ide/xmc4700.ebp @@ -123,6 +123,12 @@ + + + + @@ -156,6 +162,12 @@ + + + + @@ -192,9 +204,18 @@ + + + + + + @@ -216,6 +237,9 @@ + + @@ -248,6 +272,14 @@

    + *
  1. Initializes an instance of analog comparator module with the @ref XMC_ACMP_CONFIG_t configuration structure + * using the API XMC_ACMP_Init().
  2. + *
  3. Programs the source of input(INP) specified by @ref XMC_ACMP_INP_SOURCE_t parameter using the API + * XMC_ACMP_SetInput().
  4. + *
  5. Sets the low power mode of operation using XMC_ACMP_SetLowPowerMode() API.
  6. + *
+ * @{ + */ + +/********************************************************************************************************************* + * HEADER FILES + ********************************************************************************************************************/ +#include + +/********************************************************************************************************************* + * MACROS + ********************************************************************************************************************/ +/* If ACMP is available*/ +#if defined (COMPARATOR) + +#define XMC_ACMP0 (XMC_ACMP_t*)COMPARATOR /**< Comparator module base address defined*/ + +#if UC_SERIES == XMC14 +#define XMC_ACMP_MAX_INSTANCES (4U) /* Maximum number of Analog Comparators available*/ +#else +#define XMC_ACMP_MAX_INSTANCES (3U) /* Maximum number of Analog Comparators available*/ +#endif + +/* Checks if the pointer being passed is valid*/ +#define XMC_ACMP_CHECK_MODULE_PTR(PTR) (((PTR)== (XMC_ACMP_t*)COMPARATOR)) + +/* Checks if the instance being addressed is valid*/ +#define XMC_ACMP_CHECK_INSTANCE(INST) (((INST)< XMC_ACMP_MAX_INSTANCES)) + +/********************************************************************************************************************* + * ENUMS + ********************************************************************************************************************/ + +/** + * Defines the return value of an API. + */ +typedef enum XMC_ACMP_STATUS +{ + XMC_ACMP_STATUS_SUCCESS = 0U, /**< API completes the execution successfully */ + XMC_ACMP_STATUS_ERROR , /**< API cannot fulfill the request */ +} XMC_ACMP_STATUS_t; + +/** + * Defines the hysteresis voltage levels to reduce noise sensitivity. + */ +typedef enum XMC_ACMP_HYSTERESIS +{ + XMC_ACMP_HYSTERESIS_OFF = 0U, /**< No hysteresis */ + XMC_ACMP_HYSTERESIS_10 , /**< Hysteresis = 10mv */ + XMC_ACMP_HYSTERESIS_15 , /**< Hysteresis = 15mv */ + XMC_ACMP_HYSTERESIS_20 /**< Hysteresis = 20mv */ +} XMC_ACMP_HYSTERESIS_t; + +/** + * Defines the comparator output status options. + */ +typedef enum XMC_ACMP_COMP_OUT +{ + XMC_ACMP_COMP_OUT_NO_INVERSION = 0U, /**< ACMP output is HIGH when, Input Positive(INP) greater than Input + Negative(INN). Vplus > Vminus */ + XMC_ACMP_COMP_OUT_INVERSION /**< ACMP output is HIGH when, Input Negative(INN) greater than Input + Positive(INP). Vminus > Vplus*/ +} XMC_ACMP_COMP_OUT_t; + +/** + * Defines the analog comparator input connection method. + */ +typedef enum XMC_ACMP_INP_SOURCE +{ + XMC_ACMP_INP_SOURCE_STANDARD_PORT = 0U, /**< Input is connected to port */ + XMC_ACMP_INP_SOURCE_ACMP1_INP_PORT = (uint16_t)(COMPARATOR_ANACMP0_ACMP0_SEL_Msk) /**< Input is connected to port + and ACMP1 INP */ +} XMC_ACMP_INP_SOURCE_t; + +/********************************************************************************************************************* + * DATA STRUCTURES + ********************************************************************************************************************/ + + +/*Anonymous structure/union guard start*/ +#if defined(__CC_ARM) + #pragma push + #pragma anon_unions +#elif defined(__TASKING__) + #pragma warning 586 +#endif + +/** + * ACMP module + */ +typedef struct { + __IO uint32_t ORCCTRL; + __I uint32_t RESERVED[726]; + __IO uint32_t ANACMP[XMC_ACMP_MAX_INSTANCES]; +} XMC_ACMP_t; + +/** + * Structure for initializing the ACMP module. It configures the ANACMP register of the respective input. + */ +typedef struct XMC_ACMP_CONFIG +{ + union + { + struct + { + uint32_t : 1; + uint32_t filter_disable : 1; /**< Comparator filter option for removing glitches. By default this option + is selected in ANACMP register. Setting this option disables the filter */ + uint32_t : 1; + uint32_t output_invert : 1; /**< Option to invert the comparator output. Use XMC_@ref XMC_ACMP_COMP_OUT_t type*/ + uint32_t hysteresis : 2; /**< Hysteresis voltage to reduce noise sensitivity. Select the voltage levels + from the values defined in @ref XMC_ACMP_HYSTERESIS_t. */ + uint32_t : 26; + }; + uint32_t anacmp; + }; +} XMC_ACMP_CONFIG_t; + +/*Anonymous structure/union guard end*/ +#if defined(__CC_ARM) + #pragma pop +#elif defined(__TASKING__) + #pragma warning restore +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +/********************************************************************************************************************* + * API Prototypes + ********************************************************************************************************************/ + +/** + * @param peripheral Constant pointer to analog comparator module, of @ref XMC_ACMP_t type. Use @ref XMC_ACMP0 macro. + * @param instance ACMP instance number.
+ * Range:
0 - ACMP0
+ * 1 - ACMP1
+ * 2 - ACMP2
+ * 3 - ACMP3 - Only applicable for XMC1400 devices
+ * + * @param config Pointer to configuration data. Refer data structure @ref XMC_ACMP_CONFIG_t for settings. + * @return + * None
+ * + * \parDescription:
+ * Initializes an instance of analog comparator module.
\n + * Configures the ANACMP resister with hysteresis, comparator filter and inverted comparator output. + * + * \parRelated APIs:
+ * None. + */ +void XMC_ACMP_Init(XMC_ACMP_t *const peripheral, uint32_t instance, const XMC_ACMP_CONFIG_t *const config); + +/** + * @param peripheral Constant pointer to analog comparator module, of @ref XMC_ACMP_t type. Use @ref XMC_ACMP0 macro. + * @param instance ACMP instance number.
+ * Range:
0 - ACMP0
+ * 1 - ACMP1
+ * 2 - ACMP2
+ * 3 - ACMP3 - Only applicable for XMC1400 devices
+ * @return + * None
+ * + * \parDescription:
+ * Enables an instance of ACMP module.
\n + * Starts the comparator by setting CMP_EN bit of respective ANACMP \a instance register. The \a instance number + * determines which analog comparator to be switched on. Call this API after the successful completion of the comparator + * initilization and input selection. + * + * \parRelated APIs:
+ * XMC_ACMP_DisableComparator().
+ */ +__STATIC_INLINE void XMC_ACMP_EnableComparator(XMC_ACMP_t *const peripheral, uint32_t instance) +{ + XMC_ASSERT("XMC_ACMP_EnableComparator:Wrong module pointer", XMC_ACMP_CHECK_MODULE_PTR(peripheral)) + XMC_ASSERT("XMC_ACMP_EnableComparator:Wrong instance number", XMC_ACMP_CHECK_INSTANCE(instance) ) + + peripheral->ANACMP[instance] |= (uint16_t)COMPARATOR_ANACMP0_CMP_EN_Msk; + +} + + +/** + * @param peripheral Constant pointer to analog comparator module, of @ref XMC_ACMP_t type. Use @ref XMC_ACMP0 macro. + * @param instance ACMP instance number.
+ * Range:
0 - ACMP0
+ * 1 - ACMP1
+ * 2 - ACMP2
+ * 3 - ACMP3 - Only applicable for XMC1400 devices
+ * @return + * None
+ * \parDescription:
+ * Disables an instance of ACMP module.
\n + * Stops the comparator by resetting CMP_EN bit of respective ANACMP \a instance register. The \a instance number + * determines which analog comparator to be switched off. + * + * \parRelated APIs:
+ * XMC_ACMP_EnableComparator(). + */ +__STATIC_INLINE void XMC_ACMP_DisableComparator(XMC_ACMP_t *const peripheral, uint32_t instance) +{ + XMC_ASSERT("XMC_ACMP_DisableComparator:Wrong module pointer", XMC_ACMP_CHECK_MODULE_PTR(peripheral)) + XMC_ASSERT("XMC_ACMP_DisableComparator:Wrong instance number", XMC_ACMP_CHECK_INSTANCE(instance) ) + + peripheral->ANACMP[instance] &= (uint16_t)(~((uint32_t)COMPARATOR_ANACMP0_CMP_EN_Msk)); +} + +/** + * @param None + * @return + * None
+ * + * \parDescription:
+ * Enables the reference divider for analog comparator instance 1.
\n + * ACMP1 input INP is driven by an internal reference voltage by setting DIV_EN bit of ANACMP1 register. + * Other comparator instances can also share this reference divider option by calling the XMC_ACMP_SetInput() API. + * + * \parRelated APIs:
+ * XMC_ACMP_SetInput(). + */ +__STATIC_INLINE void XMC_ACMP_EnableReferenceDivider(void) +{ + /* Enable the divider switch and connect the divided reference to ACMP1.INP */ + COMPARATOR->ANACMP1 |= (uint16_t)(COMPARATOR_ANACMP1_REF_DIV_EN_Msk); +} + +/** + * @param None + * @return + * None
+ * + * \parDescription:
+ * Disables the reference divider for analog comparator instance 1.
\n + * ACMP1 input INP is disconnected from the reference divider. This is achieved by reseting DIV_EN bit of ANACMP1 + * register. + * + * \parRelated APIs:
+ * None. + */ +__STATIC_INLINE void XMC_ACMP_DisableReferenceDivider(void) +{ + /* Disable the divider switch and use ACMP1.INP as standard port*/ + COMPARATOR->ANACMP1 &= (uint16_t)(~(COMPARATOR_ANACMP1_REF_DIV_EN_Msk)); +} + +/** + * @param peripheral Constant pointer to analog comparator module, of @ref XMC_ACMP_t type. Use @ref XMC_ACMP0 macro. + * @param instance ACMP instance number.
+ * Range:
0 - ACMP0
+ * 2 - ACMP2
+ * 3 - ACMP3 - Only applicable for XMC1400 devices
+ * @param source ACMP input source selection options.
+ * Range:
XMC_ACMP_INP_SOURCE_STANDARD_PORT - Input is connected to port
+ * XMC_ACMP_INP_SOURCE_ACMP1_INP_PORT - Input is connected to port and ACMP1 INP
+ * @return + * None
+ * + * \parDescription:
+ * Sets the analog comparartor input selection for ACMP0, ACMP2 instances.
\n + * Apart from ACMP1 instance, each ACMP instances can be connected to its own port and ACMP1 INP. + * Calling @ref XMC_ACMP_EnableReferenceDivider() API, after this API can share the reference divider to one of the + * comparartor input as explained in the following options.
+ * The hardware options to set input are listed below.
+ *
    + *
  1. The comparator inputs aren't connected to other ACMP1 comparator inputs.
  2. + *
  3. Can program the comparator-0 to connect ACMP0.INP to ACMP1.INP in XMC1200 AA or XMC1300 AA
  4. + *
  5. Can program the comparator-0 to connect ACMP0.INN to ACMP1.INP in XMC1200 AB or XMC1300 AB or XMC1400 AA
  6. + *
  7. Can program the comparator-2 to connect ACMP2.INP to ACMP1.INP
  8. + *

+ * Directly accessed registers are ANACMP0, ANACMP2 according to the availability of instance in the devices. + * + * \parRelated APIs:
+ * @ref XMC_ACMP_EnableReferenceDivider.
+ * @ref XMC_ACMP_DisableReferenceDivider. + */ +void XMC_ACMP_SetInput(XMC_ACMP_t *const peripheral, uint32_t instance, const XMC_ACMP_INP_SOURCE_t source); + + +/** + * @param None + * @return + * None
+ * + * \parDescription:
+ * Set the comparartors to operate in low power mode, by setting the LPWR bit of ANACMP0 register.
\n + * The low power mode is controlled by ACMP0 instance. Low power mode is applicable for all instances of the + * comparator. In low power mode, blanking time will be introduced to ensure the stability of comparartor output. This + * will slow down the comparator operation. + * + * \parRelated APIs:
+ * XMC_ACMP_ClearLowPowerMode(). + */ +__STATIC_INLINE void XMC_ACMP_SetLowPowerMode(void) +{ + COMPARATOR->ANACMP0 |= (uint16_t)COMPARATOR_ANACMP0_CMP_LPWR_Msk; +} + +/** + * @param None + * @return + * None
+ * + * \parDescription:
+ * Exits the low power mode by reseting LPWR bit of ANACMP0 register.
\n + * The low power mode is controlled by ACMP0 module. Low power mode is applicable for all instances of the + * comparator. To re-enable the low power mode, call the related API @ref XMC_ACMP_SetLowPowerMode(). + * + * \parRelated APIs:
+ * XMC_ACMP_SetLowPowerMode(). + */ +__STATIC_INLINE void XMC_ACMP_ClearLowPowerMode(void) +{ + COMPARATOR->ANACMP0 &= (uint16_t)(~(uint16_t)COMPARATOR_ANACMP0_CMP_LPWR_Msk); +} + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* If ACMP is available*/ + +#endif /* XMC_ACMP_H */ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_bccu.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_bccu.h new file mode 100644 index 00000000..5ad833c8 --- /dev/null +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_bccu.h @@ -0,0 +1,1976 @@ +/** + * @file xmc_bccu.h + * @date 2015-06-20 + * + * @cond + ********************************************************************************************************************* + * XMClib v2.1.8 - XMC Peripheral Driver Library + * + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with + * Infineon Technologies AG dave@infineon.com). + ********************************************************************************************************************* + * + * Change History + * -------------- + * + * 2015-02-19: + * - Initial draft
+ * - Documentation improved
+ * + * 2015-05-08: + * - Minor bug fix in XMC_BCCU_ClearEventFlag(). + * - New APIs are added: XMC_BCCU_DIM_ReadDimDivider(), XMC_BCCU_DIM_GetDimCurve(), XMC_BCCU_IsDitherEnable()
+ * + * 2015-06-20: + * - Removed version macros and declaration of GetDriverVersion API + * + * Detailed description of file:
+ * APIs for the functional blocks of BCCU have been defined:
+ * -- GLOBAL configuration
+ * -- Clock configuration, Function/Event configuration, Interrupt configuration
+ * + * @endcond + * + */ + +#ifndef XMC_BCCU_H +#define XMC_BCCU_H + +/********************************************************************************************************************* + * HEADER FILES + ********************************************************************************************************************/ +#include + +/** + * @addtogroup XMClib XMC Peripheral Library + * @{ + */ + +/** + * @addtogroup BCCU + * @brief Brightness and Color Control Unit (BCCU) driver for the XMC1 microcontroller family. + * + * The Brightness and Color Control Unit (BCCU) is a dimming control peripheral for LED lighting applications. The BCCU + * module can be used to control multiple LED channels. Every channel generates one-bit sigma-delta bit stream with a + * user adjustable 12-bit average value. The dimming engine changes the brightness gradually (exponential curve) to appear + * natural to the human eye. It supports color control by adjusting the relative intensity of selected channels using a + * linear walk scheme for smooth color changes. It also supports high-power multi-channel LED lamps by optionally packing + * the bitstream. The optional packer which decreases the average rate of output switching by enforcing a defined on-time. + * The BCCU module generates two trigger signals to the ADC (BCCU_TRIGOUT0 and BCCU_TRIGOU1) to start conversions in a + * synchronized manner. The module can also be used as a multi-channel digital-analog converter with low-pass filters on the + * outputs. The BCCU module supports 3 independent dimming engines, 9 independent channels, Trap functions and 2 ADC + * triggering modes. + * + * The driver is divided into global control (BCCU), channel control (BCCU_CH) and dimming control (BCCU_DIM). + * + * BCCU features: + * -# Configuration structure XMC_BCCU_GLOBAL_CONFIG_t and initialization function XMC_BCCU_GlobalInit() + * -# Allows configuring of clock settings (Fast clock, Bit clock and Dimming clock). XMC_BCCU_SetFastClockPrescaler(), + * -# XMC_BCCU_SelectBitClock(), XMC_BCCU_SetDimClockPrescaler(). + * -# Allows configuring global trigger settings. XMC_BCCU_ConfigGlobalTrigger() + * -# Allows enabling multiple channels together. XMC_BCCU_ConcurrentEnableChannels() + * -# Allows enabling single channel. XMC_BCCU_EnableChannel() + * -# Allows configuring global dimming level. XMC_BCCU_SetGlobalDimmingLevel() + * -# Starts linear walk for multiple channels together. XMC_BCCU_ConcurrentStartLinearWalk(). + * -# Starts linear walk for single channel. XMC_BCCU_StartLinearWalk(). + * -# Starts dimming for multiple dimming engines together. XMC_BCCU_ConcurrentStartDimming(). + * -# Starts dimming for single dimming engine. XMC_BCCU_StartDimming(). + * + * BCCU_CH features: + * -# Configuration structure (XMC_BCCU_CH_t and initialization function XMC_BCCU_CH_Init() + * -# Allows selecting dimming engine. XMC_BCCU_CH_SelectDimEngine(). + * -# Allows setting target channel intensity. XMC_BCCU_CH_SetTargetIntensity(). + * -# Allows knowing the status of linear walk completion. XMC_BCCU_IsLinearWalkComplete() + * -# Allows setting flicker watchdog. XMC_BCCU_CH_EnableFlickerWatchdog(). + * -# Allows configuring packer settings. XMC_BCCU_CH_EnablePacker(), XMC_BCCU_CH_SetPackerThreshold(), + * XMC_BCCU_CH_SetPackerOffCompare(), XMC_BCCU_CH_SetPackerOffCounte(), XMC_BCCU_CH_SetPackerOnCounter() + * -# Allows selecting dimming bypass. XMC_BCCU_CH_DisableDimmingBypass() + * + * BCCU_DIM features: + * -# Configuration structure (XMC_BCCU_DIM_t and initialization function XMC_BCCU_DIM_Init() + * -# Allows setting target dimming engine intensity. XMC_BCCU_DIM_SetTargetDimmingLevel(). + * XMC_BCCU_DIM_SetTargetDimmingLevel + * -# Allows knowing the status of dimming completion. XMC_BCCU_IsDimmingFinished() + * -# Allows configuring dimming divider. XMC_BCCU_DIM_SetDimDivider() + * -# Allows configuring dimming curve. XMC_BCCU_DIM_ConfigDimCurve() + * + * Recommended programming sequence: + * -# Set output passive and active levels using XMC_BCCU_ConcurrentSetOutputPassiveLevel() or XMC_BCCU_SetOutputPassiveLevel() + * -# Initializes global features using XMC_BCCU_GlobalInit() + * -# Initializes channel features using XMC_BCCU_CH_Init() + * -# Initializes dimming engine using XMC_BCCU_DIM_Init() + * -# Enable channels using XMC_BCCU_ConcurrentEnableChannels() or XMC_BCCU_EnableChannel() + * -# Enable dimming engines using XMC_BCCU_ConcurrentEnableDimmingEngine() or XMC_BCCU_EnableDimmingEngine() + * -# Configure channel linear walk prescaler using XMC_BCCU_CH_SetLinearWalkPrescaler() + * -# Configure dimming divider using XMC_BCCU_DIM_SetDimDivider() + * -# Set target intensities of channels using XMC_BCCU_CH_SetTargetIntensity() + * -# Set target dim levels of dimming engines using XMC_BCCU_DIM_SetTargetDimmingLevel() + * -# Start linear walk of the channels using XMC_BCCU_ConcurrentStartLinearWalk() or XMC_BCCU_StartLinearWalk() + * -# Start dimming of the dimming engines using XMC_BCCU_ConcurrentStartDimming() or XMC_BCCU_StartDimming() + * -# Check the status of linear walk completion using XMC_BCCU_IsLinearWalkComplete() + * -# Check the status of dimming completion XMC_BCCU_IsDimmingFinished() + * @{ + */ + +#if defined (BCCU0) + +/********************************************************************************************************************* + * MACROS + ********************************************************************************************************************/ + +/********************************************************************************************************************* + * ENUMS + ********************************************************************************************************************/ +/** + * Defines the status of BCCU driver, to verify the related API calls. Use type \a XMC_BCCU_STATUS_t for this enum. + */ + typedef enum { + XMC_BCCU_STATUS_SUCCESS = 0U, /**< Operation completed successfully */ + XMC_BCCU_STATUS_ERROR = 1U, /**< Operation has some errors */ +} XMC_BCCU_STATUS_t; + +/** + * Provides the options to select bit clock mode. + */ +typedef enum { + XMC_BCCU_BCLK_MODE_NORMAL = 0U, /**< Normal Mode: Bit clock runs at 1/4 of fast clock */ + XMC_BCCU_BCLK_MODE_FAST = 1U, /**< Fast Mode: Bit clock runs at same as fast clock */ +} XMC_BCCU_BCLK_MODE_t; + +/** + * Provides the options to select trigger mode. + */ +typedef enum { + XMC_BCCU_TRIGMODE0 = 0U, /**< Mode0: Trigger on Any Channel using OR logic */ + XMC_BCCU_TRIGMODE1 = 1U, /**< Mode1: Trigger on Active channel using round-robin*/ +} XMC_BCCU_TRIGMODE_t; + +/** + * Provides the options to select trigger delay, and only be used if Bit clock in Normal mode + */ +typedef enum { + XMC_BCCU_TRIGDELAY_NO_DELAY = 0U, /**< BCCU trigger occurs on channel trigger(without delay) */ + XMC_BCCU_TRIGDELAY_QUARTER_BIT = 1U, /**< BCCU trigger occurs on 1/4 bit time delayed after channel trigger */ + XMC_BCCU_TRIGDELAY_HALF_BIT = 2U, /**< BCCU trigger occurs on 1/2 bit time delayed after channel trigger */ +} XMC_BCCU_TRIGDELAY_t; + +/** + * Provides the options to select suspend mode + */ +typedef enum { + XMC_BCCU_SUSPEND_MODE_IGNORE = 0U, /**< Request ignored, and module cannot get suspended */ + XMC_BCCU_SUSPEND_MODE_FREEZE = 1U, /**< All running channels gets stopped, and freeze into a last state (without safe stop) + */ + XMC_BCCU_SUSPEND_MODE_SAFE_FREEZE = 2U, /**< All running channels gets stopped, and freeze into a last state (with safe + stop) */ +} XMC_BCCU_SUSPEND_MODE_t; + +/** + * Provides the options to select trap edge + */ +typedef enum { + XMC_BCCU_TRAPEDGE_RISING = 0U, /**< Trap on rising edge of the BCCU.TRAPL signal */ + XMC_BCCU_TRAPEDGE_FALLING = 1U, /**< Trap on falling edge of the BCCU.TRAPL signal */ +} XMC_BCCU_TRAPEDGE_t; + +/** + * Provides the options to enable/disable the events. + * The members can be combined using 'OR' operator for multiple selection.
+ */ +typedef enum { + XMC_BCCU_EVENT_TRIGGER0 = 0x1U, /**< Trigger 0 event */ + XMC_BCCU_EVENT_TRIGGER1 = 0x2U, /**< Trigger 1 event */ + XMC_BCCU_EVENT_FIFOFULL = 0x4U, /**< FIFO Full event */ + XMC_BCCU_EVENT_FIFOEMPTY = 0x8U, /**< FIFO Empty event */ + XMC_BCCU_EVENT_TRAP = 0x10U, /**< Trap event */ +} XMC_BCCU_EVENT_t; + +/** + * Provides the options to know the status of the event flags. + * The members can be combined using 'OR' operator for multiple selection.
+ */ +typedef enum { + XMC_BCCU_EVENT_STATUS_TRIGGER0 = 0x1U, /**< Trigger 0 Event flag status */ + XMC_BCCU_EVENT_STATUS_TRIGGER1 = 0x2U, /**< Trigger 1 Event flag status */ + XMC_BCCU_EVENT_STATUS_FIFOFULL = 0x4U, /**< FIFO Full Event flag status */ + XMC_BCCU_EVENT_STATUS_FIFOEMPTY = 0x8U, /**< FIFO Empty Event flag status */ + XMC_BCCU_EVENT_STATUS_TRAP = 0x10U, /**< Trap Event flag status (Without Trap Set) */ + XMC_BCCU_EVENT_STATUS_TRAP_STATE = 0x40U, /**< Trap state flag status */ +} XMC_BCCU_EVENT_STATUS_t; + +/** + * Provides the options to know the status of trap occurrence + */ +typedef enum { + XMC_BCCU_TRAP_STATUS_DEACTIVE = 0x0U, /**< BCCU module is not in a Trap State */ + XMC_BCCU_TRAP_STATUS_ACTIVE = 0x1U, /**< BCCU module is in a Trap State */ +} XMC_BCCU_TRAP_STATUS_t; + +/** + * Provides the options to know the current level of trap + */ +typedef enum { + XMC_BCCU_TRAP_LEVEL_LOW = 0x0U, /**< BCCU.TRAPL is Low */ + XMC_BCCU_TRAP_LEVEL_HIGH = 0x1U, /**< BCCU.TRAPL is High */ +} XMC_BCCU_TRAP_LEVEL_t; + +/** + * Provides the options to select flicker watchdog enable/disable + */ +typedef enum { + XMC_BCCU_CH_FLICKER_WD_DS = 0U, /**< Disable: No control over a sigma-delta modulator output */ + XMC_BCCU_CH_FLICKER_WD_EN = 1U, /**< Enable: Limit consecutive zeros at sigma-delta modulator output */ +} XMC_BCCU_CH_FLICKER_WD_t; + +/** + * Provides the options to select gating functionality enable/disable, and be used for peak-current control + */ +typedef enum { + XMC_BCCU_CH_GATING_FUNC_DISABLE = 0U, /**< Disable: No control over a BCCU module output */ + XMC_BCCU_CH_GATING_FUNC_ENABLE = 1U, /**< Enable: External gating signal which controls BCCU module output */ +} XMC_BCCU_CH_GATING_FUNC_t; + +/** + * Provides the options to bypass dimming engine + */ +typedef enum { + XMC_BCCU_CH_DIMMING_ENGINE_BYPASS_DISABLE = 0U, /**< Disable: Brightness = Dimming Level * Intensity */ + XMC_BCCU_CH_DIMMING_ENGINE_BYPASS_ENABLE = 1U, /**< Enable: Brightness = Intensity */ +} XMC_BCCU_CH_DIMMING_ENGINE_BYPASS_t; + +/** + * Provides the options to select passive level of the channel output + */ +typedef enum{ + XMC_BCCU_CH_ACTIVE_LEVEL_HIGH = 0U, /**< Default passive level of the channel is low */ + XMC_BCCU_CH_ACTIVE_LEVEL_LOW = 1U, /**< Default passive level of the channel is high */ +} XMC_BCCU_CH_ACTIVE_LEVEL_t; + +/** + * Provides the options to select trigger edge + */ +typedef enum +{ + XMC_BCCU_CH_TRIG_EDGE_PASS_TO_ACT = 0U, /**< Trigger on output transition from passive to active */ + XMC_BCCU_CH_TRIG_EDGE_ACT_TO_PASS = 1U, /**< Trigger on output transition from active to passive */ +} XMC_BCCU_CH_TRIG_EDGE_t; + +/** + * Provides the options to select source of trap input + */ +typedef enum +{ + XMC_BCCU_CH_TRAP_INA = 0x0U, /**< Trap INA */ + XMC_BCCU_CH_TRAP_INB = 0x1U, /**< Trap INB */ + XMC_BCCU_CH_TRAP_INC = 0x2U, /**< Trap INC */ + XMC_BCCU_CH_TRAP_IND = 0x3U, /**< Trap IND */ + XMC_BCCU_CH_TRAP_INE = 0x4U, /**< Trap INE */ + XMC_BCCU_CH_TRAP_INF = 0x5U, /**< Trap INF */ + XMC_BCCU_CH_TRAP_ING = 0x6U, /**< Trap ING */ + XMC_BCCU_CH_TRAP_INH = 0x7U, /**< Trap INH */ + XMC_BCCU_CH_TRAP_INI = 0x8U, /**< Trap INI */ + XMC_BCCU_CH_TRAP_INJ = 0x9U, /**< Trap INJ */ + XMC_BCCU_CH_TRAP_INK = 0xAU, /**< Trap INK */ + XMC_BCCU_CH_TRAP_INL = 0xBU, /**< Trap INL */ + XMC_BCCU_CH_TRAP_INM = 0xCU, /**< Trap INM */ + XMC_BCCU_CH_TRAP_INN = 0xDU, /**< Trap INN */ + XMC_BCCU_CH_TRAP_INO = 0xEU, /**< Trap INO */ + XMC_BCCU_CH_TRAP_INP = 0xFU, /**< Trap INP */ +} XMC_BCCU_CH_TRAP_IN_t; + +/** + * Provides the options to select edge for trap occurrence + */ +typedef enum +{ + XMC_BCCU_CH_TRAP_EDGE_RISING = 0U, /**< Trap on rising edge of the BCCU.TRAPL signal */ + XMC_BCCU_CH_TRAP_EDGE_FALLING = 1U /**< Trap on falling edge of the BCCU.TRAPL signal */ +} XMC_BCCU_CH_TRAP_EDGE_t; + +/** + * Provides the options to select trigger output, and only be used in XMC_BCCU_TRIGMODE1 + */ +typedef enum { + XMC_BCCU_CH_TRIGOUT0 = 0U, /**< Trigger occurrence on BCCU_TRIGOUT0 signal */ + XMC_BCCU_CH_TRIGOUT1 = 1U, /**< Trigger occurrence on BCCU_TRIGOUT1 signal */ +} XMC_BCCU_CH_TRIGOUT_t; + +/** + * Provides the options to select dimming source of the channel + */ +typedef enum { + XMC_BCCU_CH_DIMMING_SOURCE_GLOBAL = 7U, /**< Global Dimming Engine */ + XMC_BCCU_CH_DIMMING_SOURCE_DE0 = 0U, /**< Dimming Engine 0 */ + XMC_BCCU_CH_DIMMING_SOURCE_DE1 = 1U, /**< Dimming Engine 1 */ + XMC_BCCU_CH_DIMMING_SOURCE_DE2 = 2U, /**< Dimming Engine 2 */ +} XMC_BCCU_CH_DIMMING_SOURCE_t; + +/** + * Provides the options to select exponential dimming curve + */ +typedef enum { + XMC_BCCU_DIM_CURVE_COARSE = 0U, /**< Coarse curve: Slope of the linear pieces doubles every time, when it passes specific + thresholds of 16, 32, 64, 128, 256, 512, 1024, 2048 */ + XMC_BCCU_DIM_CURVE_FINE = 1U, /**< Fine Curve: More pieces and different line slopes */ +} XMC_BCCU_DIM_CURVE_t; + +/********************************************************************************************************************* + * DATA STRUCTURES + ********************************************************************************************************************/ +/** + * Redefinition of BCCU module structure; pointer to bccu module base address + */ +typedef BCCU_Type XMC_BCCU_t; + +/** + * Redefinition of BCCU module channel structure; pointer to bccu module channel Base address + */ +typedef BCCU_CH_Type XMC_BCCU_CH_t; + +/** + * Redefinition of BCCU module dimming engine structure; pointer to bccu module dimming engine base address + */ +typedef BCCU_DE_Type XMC_BCCU_DIM_t; + +/*Anonymous structure/union guard start*/ +#if defined(__CC_ARM) + #pragma push + #pragma anon_unions +#elif defined(__TASKING__) + #pragma warning 586 +#endif + +/** + * Configures a global setting of the BCCU module. + */ +typedef struct XMC_BCCU_GLOBAL_CONFIG +{ + union{ + struct{ + uint32_t trig_mode:1; /**< Selects trigger Mode. Use type @ref XMC_BCCU_TRIGMODE_t */ + uint32_t : 1; + uint32_t trig_delay:2; /**< Selects trigger delay between channel & module trigger. \n Use type @ref + XMC_BCCU_TRIGDELAY_t */ + uint32_t : 12; + uint32_t maxzero_at_output:12; /**< Configures maximum 0's allowed at modulator output */ + }; + uint32_t globcon; /* Not to use */ + }; + union{ + struct{ + uint32_t fclk_ps:12; /**< Configures the ratio between fast clock and module clock */ + uint32_t : 3; + uint32_t bclk_sel:1; /**< Selects the bit clock. Use type @ref XMC_BCCU_BCLK_MODE_t */ + uint32_t dclk_ps:12; /**< Configures the ratio between dimmer clock and module clock */ + }; + uint32_t globclk; /* Not to use */ + }; + uint32_t global_dimlevel; /**< Configures global dimming engine dimming level */ +} XMC_BCCU_GLOBAL_CONFIG_t; + + +/** + * Configures global trigger settings of the BCCU module. + */ +typedef struct XMC_BCCU_TRIG_CONFIG +{ + XMC_BCCU_TRIGMODE_t mode; /**< Selects global trigger mode which decides when to occur BCCU trigger */ + XMC_BCCU_TRIGDELAY_t delay; /**< Selects global trigger delay between channel trigger & BCCU trigger */ + uint16_t mask_chans; /**< Channel mask to configure trigger settings for multiple channels For example: + If channel 0 and 7, wants to configure then the channel mask is 01000 0001 = 0x81\n*/ + uint16_t mask_trig_lines; /**< Trigger line mask */ +} XMC_BCCU_TRIG_CONFIG_t; + +/** + * Configures channel settings of the BCCU module. + */ +#ifdef DOXYGEN +typedef struct XMC_BCCU_CH_CONFIG +{ + uint32_t pack_thresh:3; /**< Configures packer threshold value of FIFO */ + uint32_t pack_en:1; /**< Enables a packed output bitstream */ + uint32_t dim_sel:3; /**< Selects a dimming engine source of the channel. \n Use type @ref XMC_BCCU_CH_DIMMING_SOURCE_t */ + uint32_t dim_bypass:1; /**< Selects dimming engine bypass enable. \n Use type @ref XMC_BCCU_CH_DIMMING_ENGINE_BYPASS_t */ + uint32_t gate_en:1; /**< Selects gating enable. Use type @ref XMC_BCCU_CH_GATING_FUNC_t */ + uint32_t flick_wd_en:1; /**< Selects flicker watchdog enable. Use type @ref XMC_BCCU_CH_FLICKER_WD_t */ + uint32_t trig_edge:1; /**< Selects trigger edge. Use type @ref XMC_BCCU_CH_TRIG_EDGE_t */ + uint32_t force_trig_en:1; /**< Selects force trigger enable; generates a trigger if modulator output do not change\n for + 256 bclk cycles */ + uint32_t pack_offcmp_lev:8; /**< Configures a packer off-time compare level. When the off-time counter reaches this, the + measured on & off time counters are stored into FIFO */ + uint32_t pack_oncmp_lev:8; /**< Configures a packer on-time compare level. When the on-time counter reaches this,\n + the measured on & off time counters are stored into FIFO */ + uint32_t pack_offcnt_val:8; /**< Configures an initial packer off-time counter level, only if channel is disabled.
+ Controls phase shift of the modulator output */ + uint32_t pack_oncnt_val:8; /**< Configures an initial packer on-time counter level, only if channel is disabled.
+ Controls phase shift of the modulator output */ +}XMC_BCCU_CH_CONFIG_t; +#endif + +typedef struct XMC_BCCU_CH_CONFIG +{ + union{ + struct{ + uint32_t pack_thresh:3; /**< Configures packer threshold value of FIFO */ + uint32_t pack_en:1; /**< Enables a packed output bitstream */ + uint32_t dim_sel:3; /**< Selects a dimming engine source of the channel. \n Use type @ref XMC_BCCU_CH_DIMMING_SOURCE_t + */ + uint32_t dim_bypass:1; /**< Selects dimming engine bypass enable. \n Use type @ref XMC_BCCU_CH_DIMMING_ENGINE_BYPASS_t */ + uint32_t gate_en:1; /**< Selects gating enable. Use type @ref XMC_BCCU_CH_GATING_FUNC_t */ + uint32_t flick_wd_en:1; /**< Selects flicker watchdog enable. Use type @ref XMC_BCCU_CH_FLICKER_WD_t */ + uint32_t trig_edge:1; /**< Selects trigger edge. Use type @ref XMC_BCCU_CH_TRIG_EDGE_t */ + uint32_t force_trig_en:1; /**< Selects force trigger enable; generates a trigger if modulator output do not change\n + for 256 bclk cycles */ + }; + uint32_t chconfig; /* Not to use */ + }; + union{ + struct{ + uint32_t pack_offcmp_lev:8; /**< Configures a packer off-time compare level. When the off-time counter reaches \n + this, the measured on & off time counters are stored into FIFO */ + uint32_t : 8; + uint32_t pack_oncmp_lev:8; /**< Configures a packer on-time compare level. When the on-time counter reaches this,\n + the measured on & off time counters are stored into FIFO */ + }; + uint32_t pkcmp; /* Not to use */ + }; + union{ + struct{ + uint32_t pack_offcnt_val:8; /**< Configures an initial packer off-time counter level, only if channel is disabled.
+ Controls phase shift of the modulator output */ + uint32_t : 8; + uint32_t pack_oncnt_val:8; /**< Configures an initial packer on-time counter level, only if channel is disabled.
+ Controls phase shift of the modulator output */ + }; + uint32_t pkcntr; /* Not to use */ + }; +}XMC_BCCU_CH_CONFIG_t; + +/** + * Configures dimming engine settings of the BCCU module. + */ +#ifdef DOXYGEN +typedef struct XMC_BCCU_DIM_CONFIG +{ + uint32_t dim_div:10; /**< Configures a dimming clock divider, used to adjust the fade rate. If 0, the dimming level
+ as same as target dimming level on shadow transfer */ + uint32_t dither_en:1; /**< Selects a dither enable. Dithering added for every dimming step if dimming level < 128. */ + uint32_t cur_sel:1; /**< Selects a type of exponential curve. Use type @ref XMC_BCCU_DIM_CURVE_t. If dither
+ enabled, the configuration is being ignored */ +}XMC_BCCU_DIM_CONFIG_t; +#endif + +typedef struct XMC_BCCU_DIM_CONFIG +{ + union{ + struct{ + uint32_t dim_div:10; /**< Configures a dimming clock divider, used to adjust the fade rate. If 0, the dimming level
+ as same as target dimming level on shadow transfer */ + uint32_t : 6; + uint32_t dither_en:1; /**< Selects a dither enable. Dithering added for every dimming step if dimming level < 128. */ + uint32_t cur_sel:1; /**< Selects a type of exponential curve. Use type @ref XMC_BCCU_DIM_CURVE_t. If dither
+ enabled, the configuration is being ignored */ + }; + uint32_t dtt; /* Not to use */ + }; +}XMC_BCCU_DIM_CONFIG_t; + +/*Anonymous structure/union guard end*/ +#if defined(__CC_ARM) + #pragma pop +#elif defined(__TASKING__) + #pragma warning restore +#endif +/********************************************************************************************************************* + * API PROTOTYPES + ********************************************************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param config Pointer to constant bccu global configuration data structure. Use type @ref XMC_BCCU_GLOBAL_CONFIG_t. + * + * @return None + * + * \parDescription:
+ * Initializes three main clocks (fast clock, bit clock, dimmer clock) by using \a fclk_ps \a bclk_sel \a dclk_ps parameters + * and writing into a GLOBCLK register.\n + * And also configures a trigger mode, trigger delay, maximum 0's allowed at modulator output by writing into a GLOBCON + * register.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_Init(), XMC_BCCU_DIM_Init()\n\n\n +*/ +void XMC_BCCU_GlobalInit (XMC_BCCU_t *const bccu, const XMC_BCCU_GLOBAL_CONFIG_t *const config); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param mode Trigger mode selection. \b Range: XMC_BCCU_TRIGMODE0, XMC_BCCU_TRIGMODE1.\n + * 1. XMC_BCCU_TRIGMODE0 - Trigger on Any Channel + * 2. XMC_BCCU_TRIGMODE1 - Trigger on Active channel + * @param delay Delay to avoid sampling during switching noise. Use type @ref XMC_BCCU_TRIGDELAY_t. \n + * \b Range: XMC_BCCU_NO_DELAY, XMC_BCCU_QUARTER_BIT_DELAY, XMC_BCCU_HALF_BIT_DELAY. + * + * @return None + * + * \parDescription:
+ * Configures trigger mode and trigger delay by writing register bits GLOBCON.TM, GLOBCON.TRDEL. \a mode and \a delay + * parameters which decides when to trigger a conversion of vadc module for voltage measurement. \n\n + * + * \parRelated APIs:
+ * XMC_BCCU_EnableChannelTrigger(), XMC_BCCU_ReadGlobalTrigger(), XMC_BCCU_ConcurrentConfigTrigger(), XMC_BCCU_GlobalInit(), + * XMC_BCCU_ReadLastTrigChanNr(), XMC_BCCU_GetChannelOutputLvlAtLastTrigger(), XMC_BCCU_CH_ConfigTrigger()\n\n\n + */ +void XMC_BCCU_ConfigGlobalTrigger(XMC_BCCU_t *const bccu, XMC_BCCU_TRIGMODE_t mode, XMC_BCCU_TRIGDELAY_t delay); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * + * @return Source of Trigger mode. \b Range: 0 or 1 \n + * 0 - Trigger mode 0 (Trigger on Any Channel) \n + * 1 - Trigger mode 1 (Trigger on Active Channel)\n\n + * \parDescription:
+ * Retrieves global trigger mode of the BCCU module by reading the register bit GLOBCON_TM. Use XMC_BCCU_TRIGMODE_t type to + * validate a returned value.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_ConfigGlobalTrigger(), XMC_BCCU_ConcurrentConfigTrigger(), XMC_BCCU_GlobalInit()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_ReadGlobalTrigger (XMC_BCCU_t *const bccu) +{ + return (uint32_t)(bccu->GLOBCON & BCCU_GLOBCON_TM_Msk); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param input Trap input selection. Use type @ref XMC_BCCU_TRIGDELAY_t. + * \b Range: XMC_BCCU_TRIGDELAY_NO_DELAY, XMC_BCCU_TRIGDELAY_QUARTER_BIT, XMC_BCCU_TRIGDELAY_HALF_BIT. + * + * @return None + * + * \parDescription:
+ * Selects input of trap functionality by writing register bit GLOBCON_TRAPIS. The trap functionality is used to switch + * off the connected power devices when trap input becomes active.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SetTrapEdge(), XMC_BCCU_ReadTrapInput(), XMC_BCCU_EnableTrap(), XMC_BCCU_ConcurrentEnableTrap()\n\n\n + */ +void XMC_BCCU_SelectTrapInput (XMC_BCCU_t *const bccu, XMC_BCCU_CH_TRAP_IN_t input); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * + * @return Source of trap input. \b Range: 0 to 15 \n + * 0 - TRAPINA \n + * 1 - TRAPINB and so on. \n + * \parDescription:
+ * Retrieves trap input of the channel by reading the register bit GLOBCON_TRAPIS. Use XMC_BCCU_CH_TRAP_IN_t type to + * validate a returned value.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SelectTrapInput()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_ReadTrapInput (XMC_BCCU_t *const bccu) +{ + return (uint32_t)(( (bccu->GLOBCON) & BCCU_GLOBCON_TRAPIS_Msk) >> BCCU_GLOBCON_TRAPIS_Pos); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param edge Trap edge selection. Use type @ref XMC_BCCU_CH_TRAP_EDGE_t. \n + * \b Range: XMC_BCCU_CH_TRAP_EDGE_RISING, XMC_BCCU_CH_TRAP_EDGE_FALLING. + * + * @return None + * + * \parDescription:
+ * Selects active edge which detects trap on TRAPL signal by writing register bit GLOBCON_TRAPED.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SelectTrapInput(), XMC_BCCU_ReadTrapEdge(), XMC_BCCU_EnableTrap(), XMC_BCCU_ConcurrentEnableTrap()\n\n\n + */ +void XMC_BCCU_SetTrapEdge (XMC_BCCU_t *const bccu, XMC_BCCU_CH_TRAP_EDGE_t edge); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * + * @return Trap edge selection. \b Range: 0 or 1 \n + * 0 - XMC_BCCU_CH_TRAP_EDGE_RISING \n + * 1 - XMC_BCCU_CH_TRAP_EDGE_FALLING. \n + * \parDescription:
+ * Retrieves trap edge by reading the register bit GLOBCON_TRAPED. Use XMC_BCCU_CH_TRAP_EDGE_t type to + * validate a returned value.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SetTrapEdge()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_ReadTrapEdge (XMC_BCCU_t *const bccu) +{ + return (uint32_t)(( (bccu->GLOBCON) & BCCU_GLOBCON_TRAPED_Msk) >> BCCU_GLOBCON_TRAPED_Pos); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param mode Suspend mode selection. Use type @ref XMC_BCCU_SUSPEND_MODE_t. \n + * \b Range: XMC_BCCU_SUSPEND_MODE_IGNORE, XMC_BCCU_SUSPEND_MODE_FREEZE, XMC_BCCU_USPEND_MODE_SAFE_FREEZE. \n + * + * @return None + * + * \parDescription:
+ * Configures suspend mode by writing register bit GLOBCON_SUSCFG.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_ReadSuspendMode()\n\n\n + */ +void XMC_BCCU_ConfigSuspendMode (XMC_BCCU_t *const bccu, XMC_BCCU_SUSPEND_MODE_t mode); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * + * @return Trap edge selection. \b Range: 0, 1, 2 \n + * 0 - XMC_BCCU_SUSPEND_MODE_IGNORE \n + * 1 - XMC_BCCU_SUSPEND_MODE_FREEZE. \n + * 2 - XMC_BCCU_USPEND_MODE_SAFE_FREEZE. \n + * \parDescription:
+ * Retrieves the state of suspend mode by reading the register bit GLOBCON_TRAPIS. Use XMC_BCCU_SUSPEND_MODE_t type to + * validate a returned value.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_ConfigSuspendMode()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_ReadSuspendMode (XMC_BCCU_t *const bccu) +{ + return (uint32_t)( ((bccu->GLOBCON) & BCCU_GLOBCON_SUSCFG_Msk) >> BCCU_GLOBCON_SUSCFG_Pos); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * + * @return Last triggered channel number. \b Range: 0 to 8\n + * 0 - BCCU Channel 0\n + * 1 - BCCU Channel 1 and so on.\n + * \parDescription:
+ * Retrieves last triggered channel number of a BCCU module by reading the register bit GLOBCON_LTRS.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_GetChannelOutputLvlAtLastTrigger(), XMC_BCCU_ConfigGlobalTrigger(), XMC_BCCU_ConcurrentConfigTrigger(), + * XMC_BCCU_ReadGlobalTrigger(), XMC_BCCU_GlobalInit()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_ReadLastTrigChanNr (XMC_BCCU_t *const bccu) +{ + return (uint32_t)(( (bccu->GLOBCON) & BCCU_GLOBCON_LTRS_Msk) >> BCCU_GLOBCON_LTRS_Pos); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param threshold_no Number of consecutive zeroes at modulator output. \b Range: 0 to 4095. + * + * @return None + * + * \parDescription:
+ * Configures number of consecutive zeroes allowed at modulator output (flicker watch-dog number) by writing register + * bit GLOBCON_WDMBN.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_EnableFlickerWatchdog(), XMC_BCCU_ReadFlickerWDThreshold(), XMC_BCCU_CH_Init(), XMC_BCCU_CH_DisableFlickerWatchdog()\n\n\n + */ +void XMC_BCCU_SetFlickerWDThreshold (XMC_BCCU_t *const bccu, uint32_t threshold_no); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * + * @return Number of consecutive zeroes at modulator output. \b Range: 0 to 4095 \n + * \parDescription:
+ * Retrieves number of consecutive zeroes at modulator output (flicker watchdog number) by reading the register bit + * GLOBCON_WDMBN.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SetFlickerWDThreshold(), XMC_BCCU_CH_EnableFlickerWatchdog(), XMC_BCCU_CH_Init(), XMC_BCCU_CH_DisableFlickerWatchdog()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_ReadFlickerWDThreshold (XMC_BCCU_t *const bccu) +{ + return (uint32_t)(( (bccu->GLOBCON) & BCCU_GLOBCON_WDMBN_Msk) >> BCCU_GLOBCON_WDMBN_Pos); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param div Prescaler factor. \b Range: 0 to 4095. + * + * @return None + * + * \parDescription:
+ * Configures trigger functionality clock prescaler factor of a BCCU module by writing register bit GLOBCLK_FCLK_PS.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SetDimClockPrescaler(), XMC_BCCU_SelectBitClock(), XMC_BCCU_ReadFastClock()\n\n\n +*/ +void XMC_BCCU_SetFastClockPrescaler (XMC_BCCU_t *const bccu, uint32_t div); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * + * @return Prescaler factor. \b Range: 0 to 4095 + * \parDescription:
+ * Retrieves fast clock prescaler factor of a BCCU module by reading the register bit GLOBCLK_FCLK_PS. The fast clock is + * derived from the bccu clock by prescaler factor i.e. fdclk = fbccu_clk / prescaler factor.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SetFastClockPrescaler(), XMC_BCCU_ReadBitClock(), XMC_BCCU_ReadDimClock()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_ReadFastClock (XMC_BCCU_t *const bccu) +{ + return (uint32_t)(((bccu->GLOBCLK) & BCCU_GLOBCLK_FCLK_PS_Msk) >> BCCU_GLOBCLK_FCLK_PS_Pos); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param div Prescaler factor. \b Range: 0 to 4095. + * + * @return None + * + * \parDescription:
+ * Configures dimmer clock prescaler factor of a BCCU module by writing register bit GLOBCLK_DCLK_PS.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_DIM_SetDimDivider(), XMC_BCCU_SetFastClockPrescaler(), XMC_BCCU_SelectBitClock(), XMC_BCCU_ReadDimClock()\n\n\n + */ +void XMC_BCCU_SetDimClockPrescaler (XMC_BCCU_t *const bccu, uint32_t div); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * + * @return Prescaler factor. \b Range: 0 to 4095 + * \parDescription:
+ * Retrieves dimmer clock prescaler factor of a BCCU module by reading the register bit GLOBCLK_DCLK_PS. The dim clock is + * derived from the bccu clock by prescaler factor. \n i.e. fdclk = fbccu_clk / prescaler factor.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SetDimClockPrescaler(), XMC_BCCU_ReadBitClock(), XMC_BCCU_ReadFastClock()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_ReadDimClock (XMC_BCCU_t *const bccu) +{ + return (uint32_t)(((bccu->GLOBCLK) & BCCU_GLOBCLK_DCLK_PS_Msk) >> BCCU_GLOBCLK_DCLK_PS_Pos); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param div Prescaler factor. Use type @ref XMC_BCCU_BCLK_MODE_t. \n + * \b Range: XMC_BCCU_BCLK_MODE_NORMAL or XMC_BCCU_BCLK_MODE_FAST. \n + * @return None + * + * \parDescription:
+ * Configures modulator output (bit-time) clock prescaler factor of a BCCU module by writing register bit GLOBCLK_BCS.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SetFastClockPrescaler(), XMC_BCCU_SetDimClockPrescaler(), XMC_BCCU_ReadBitClock()\n\n\n + */ +void XMC_BCCU_SelectBitClock (XMC_BCCU_t *const bccu, XMC_BCCU_BCLK_MODE_t div); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * + * @return Prescaler factor. \b Range: 0 or 1 \n + * 0 - XMC_BCCU_BCLK_MODE_NORMAL \n + * 1 - XMC_BCCU_BCLK_MODE_FAST \n + * \parDescription:
+ * Retrieves modulator output (bit-time) clock prescaler factor of a BCCU module by reading the register bit GLOBCLK_BCS. + * Use XMC_BCCU_BCLK_MODE_t type to validate a returned value.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SelectBitClock(), XMC_BCCU_ReadDimClock(), XMC_BCCU_ReadFastClock()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_ReadBitClock (XMC_BCCU_t *const bccu) +{ + return (uint32_t)(((bccu->GLOBCLK) & BCCU_GLOBCLK_BCS_Msk) >> BCCU_GLOBCLK_BCS_Pos); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param mask Channel mask to enable multiple channels.\n + * For example: If channel 0, channel 7, channel 1 wants to enable at a same time, \n + * then channel mask is 01000 0011 = 0x83\n + * ------------------------------------------------------------------------------------------------------\n + * | Chan8 | Chan7 | Chan6 | Chan5 | Chan4 | Chan3 | Chan2 | Chan1 | Chan0 |\n + * ------------------------------------------------------------------------------------------------------\n + * + * @return None + * + * \parDescription:
+ * Enables multiple channels at a same time using \a mask by writing a register CHEN.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_EnableChannel(), XMC_BCCU_ConcurrentDisableChannels()\n\n\n + */ +void XMC_BCCU_ConcurrentEnableChannels (XMC_BCCU_t *const bccu, uint32_t mask); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param mask Channel mask to disable multiple channels.\n + * For example: If channel 0, channel 7, channel 1 wants to disable at a same time, \n + * then channel mask is 01000 0011 = 0x83\n + * ------------------------------------------------------------------------------------------------------\n + * | Chan8 | Chan7 | Chan6 | Chan5 | Chan4 | Chan3 | Chan2 | Chan1 | Chan0 |\n + * ------------------------------------------------------------------------------------------------------\n + * + * @return None + * + * \parDescription:
+ * Disables multiple channels at a same time using \a mask by writing a register CHEN.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_ConcurrentEnableChannels(), XMC_BCCU_DisableChannel()\n\n\n + */ +void XMC_BCCU_ConcurrentDisableChannels (XMC_BCCU_t *const bccu, uint32_t mask); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param chan_mask Channel mask to enable multiple channels.\n + * For example: If channel 0, channel 7, channel 1 wants to enable at a same time, \n + * then channel mask is 01000 0011 = 0x83\n + * ------------------------------------------------------------------------------------------------------\n + * | Chan8 | Chan7 | Chan6 | Chan5 | Chan4 | Chan3 | Chan2 | Chan1 | Chan0 |\n + * ------------------------------------------------------------------------------------------------------\n + * @param level Passive level selection. Use type @ref XMC_BCCU_CH_ACTIVE_LEVEL_t.\n + * \b Range: XMC_BCCU_CH_ACTIVE_LEVEL_HIGH or XMC_BCCU_CH_ACTIVE_LEVEL_LOW + * + * @return None + * + * \parDescription:
+ * Configures passive levels of multiple channels at a same time using \a mask by writing a register bit CHOCON_CHyOP.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SetOutputPassiveLevel()\n\n\n + */ +void XMC_BCCU_ConcurrentSetOutputPassiveLevel(XMC_BCCU_t *const bccu, uint32_t chan_mask, XMC_BCCU_CH_ACTIVE_LEVEL_t level); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param mask Channel mask to enable multiple channels trap functionality.\n + * For example: If channel 0, channel 7, channel 1 wants to enable a trap functionality at a same time, \n + * then channel mask is 01000 0011 = 0x83\n + * ------------------------------------------------------------------------------------------------------\n + * | Chan8 | Chan7 | Chan6 | Chan5 | Chan4 | Chan3 | Chan2 | Chan1 | Chan0 |\n + * ------------------------------------------------------------------------------------------------------\n + * + * @return None + * + * \parDescription:
+ * Enables multiple channels trap functionality at the same time using \a mask by writing a register bit CHOCON_CHyTPE.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_EnableTrap(), XMC_BCCU_ConcurrentDisableTrap(), XMC_BCCU_SelectTrapInput(), XMC_BCCU_SetTrapEdge()\n\n\n + */ +void XMC_BCCU_ConcurrentEnableTrap (XMC_BCCU_t *const bccu, uint32_t mask); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param mask Channel mask to disable multiple channels trap functionality. + * For example: If channel 0, channel 7, channel 1 wants to disable a trap functionality at a same time, \n + * then channel mask is 01000 0011 = 0x83\n + * ------------------------------------------------------------------------------------------------------\n + * | Chan8 | Chan7 | Chan6 | Chan5 | Chan4 | Chan3 | Chan2 | Chan1 | Chan0 |\n + * ------------------------------------------------------------------------------------------------------\n + * + * @return None + * + * \parDescription:
+ * Disables multiple channels trap functionality at the same time using \a mask by writing a register bit CHOCON_CHyTPE.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_DisableTrap(), XMC_BCCU_ConcurrentEnableTrap()\n\n\n + */ +void XMC_BCCU_ConcurrentDisableTrap (XMC_BCCU_t *const bccu, uint32_t mask); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param trig Pointer to a trigger configuration data structure. Use type @ref XMC_BCCU_TRIG_CONFIG_t. + * + * @return None + * + * \parDescription:
+ * Configures global trigger settings: trigger mode, trigger delay, individual trigger lines and channel mask by writing a \n + * registers GLOBCON and CHTRIG. Trigger mode decides when to generate a BCCU trigger, trigger delay postpones the channel \n + * trigger by 1/4, or 1/2 bclk cycles\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_ConfigGlobalTrigger(), XMC_BCCU_ReadLastTrigChanNr(), XMC_BCCU_ReadGlobalTrigger(), XMC_BCCU_GlobalInit()\n\n\n + */ +void XMC_BCCU_ConcurrentConfigTrigger (XMC_BCCU_t *const bccu, XMC_BCCU_TRIG_CONFIG_t *trig); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param mask Channel mask to start a linear walk for multiple channels at a same time.\n + * For example: If channel 0, channel 7, channel 1 wants to start a linear walk at a same time, \n + * then channel mask is 01000 0011 = 0x83\n + * ------------------------------------------------------------------------------------------------------\n + * | Chan8 | Chan7 | Chan6 | Chan5 | Chan4 | Chan3 | Chan2 | Chan1 | Chan0 |\n + * ------------------------------------------------------------------------------------------------------\n + * + * @return None + * + * \parDescription:
+ * After channel initialization, the outcome of executing the API starts changing the color smoothly towards to target \n + * for multiple channels at a same time using \a mask by writing a register CHSTRCON.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_StartLinearWalk(), XMC_BCCU_ConcurrentAbortLinearWalk()\n\n\n + */ +void XMC_BCCU_ConcurrentStartLinearWalk (XMC_BCCU_t *const bccu, uint32_t mask); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param mask Channel mask to stop a linear walk for multiple channels at a same time.\n + * For example: If channel 0, channel 7, channel 1 wants to abort a linear walk at a same time, \n + * then channel mask is 01000 0011 = 0x83\n + * ------------------------------------------------------------------------------------------------------\n + * | Chan8 | Chan7 | Chan6 | Chan5 | Chan4 | Chan3 | Chan2 | Chan1 | Chan0 |\n + * ------------------------------------------------------------------------------------------------------\n + * + * @return None + * + * \parDescription:
+ * When the linear walk in progress, the outcome of executing the API is stopping the linear walk (i.e. color change) + * immediately for multiple channels at a same time using \a mask by writing a register CHSTRCON.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_AbortLinearWalk(), XMC_BCCU_ConcurrentStartLinearWalk()\n\n\n + */ +void XMC_BCCU_ConcurrentAbortLinearWalk (XMC_BCCU_t *const bccu, uint32_t mask); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param mask Dimming engine mask to enable multiple dimming engine at a same time.\n + * For example: If dimming engine 0, channel 2 wants to enable a dimming at a same time, + * then dimming engine mask is 0101 = 0x03\n + * --------------------------\n + * | DE2 | DE1 | DE0 |\n + * --------------------------\n + * + * @return None + * + * \parDescription:
+ * Enables multiple dimming engines at a same time using \a mask by writing a register DEEN.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_EnableDimmingEngine(), XMC_BCCU_ConcurrentDisableDimmingEngine()\n\n\n + */ +void XMC_BCCU_ConcurrentEnableDimmingEngine (XMC_BCCU_t *const bccu, uint32_t mask); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param mask Dimming engine mask to disable multiple dimming engine at a same time.\n + * For example: If dimming engine 0, channel 2 wants to disable a dimming at a same time, + * then dimming engine mask is 0101 = 0x03\n + * --------------------------\n + * | DE2 | DE1 | DE0 |\n + * --------------------------\n + * + * @return None + * + * \parDescription:
+ * Disables multiple dimming engines at a same time using \a mask by writing a register DEEN.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_DisableDimmingEngine(), XMC_BCCU_ConcurrentEnableDimmingEngine()\n\n\n + */ +void XMC_BCCU_ConcurrentDisableDimmingEngine (XMC_BCCU_t *const bccu, uint32_t mask); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param mask Dimming engine mask to start a dimming for multiple dimming engines at a same time.\n + * For example: If dimming engine 0, channel 2 wants to start a dimming at a same time, + * then dimming engine mask is 0101 = 0x03\n + * --------------------------\n + * | DE2 | DE1 | DE0 |\n + * --------------------------\n + * + * @return None + * + * \parDescription:
+ * After dimming engine initialization, the outcome of executing the API starts changing the brightness towards to target + * for multiple dimming engines at a same time using \a mask by writing a register DESTRCON.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_StartDimming(), XMC_BCCU_ConcurrentAbortDimming()\n\n\n + */ +void XMC_BCCU_ConcurrentStartDimming (XMC_BCCU_t *const bccu, uint32_t mask); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param mask Dimming engine mask to abort a dimming for multiple dimming engines at a same time.\n + * For example: If dimming engine 0, channel 2 wants to abort a dimming at a same time, + * then dimming engine mask is 0101 = 0x03\n + * --------------------------\n + * | DE2 | DE1 | DE0 |\n + * --------------------------\n + * + * @return None + * + * \parDescription:
+ * When the dimming in progress, the outcome of executing the API is stopping the dimming (i.e. fading) + * immediately for specific dimming engine number \a dim_no by writing a register DESTRCON.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_AbortDimming(), XMC_BCCU_ConcurrentStartDimming()\n\n\n + */ +void XMC_BCCU_ConcurrentAbortDimming (XMC_BCCU_t *const bccu, uint32_t mask); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param level Dimming level of global dimming engine. \b Range: 0 to 4095\n + * + * @return None + * + * \parDescription:
+ * Configures a global dimming level by writing a register GLOBDIM. This is useful only if global dimming engine selected. + * Otherwise the configuration is ignored. \n\n + * + * \parRelated APIs:
+ * XMC_BCCU_DIM_SetTargetDimmingLevel()\n\n\n + */ +void XMC_BCCU_SetGlobalDimmingLevel (XMC_BCCU_t *const bccu, uint32_t level); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param event Event mask to enable multiple events at a time using ORed values of @ref XMC_BCCU_EVENT_t.\n + * For example: If XMC_BCCU_EVENT_TRIGGER0, XMC_BCCU_EVENT_TRIGGER1, XMC_BCCU_EVENT_FIFOEMPTY wants to enable + * at a same time,\n then event mask is = (XMC_BCCU_EVENT_TRIGGER0 | XMC_BCCU_EVENT_TRIGGER1 | + * XMC_BCCU_EVENT_FIFOEMPTY) \n + * + * @return None + * + * \parDescription:
+ * Enables multiple interrupt events at a same time using ORed values of @ref XMC_BCCU_EVENT_t by writing a register EVIER.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_DisableInterrupt()\n\n\n + */ +__STATIC_INLINE void XMC_BCCU_EnableInterrupt (XMC_BCCU_t *const bccu, uint32_t event) +{ + bccu->EVIER |= event; +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param event Event mask to disable multiple events at a time using ORed values of @ref XMC_BCCU_EVENT_t.\n + * For example: If XMC_BCCU_EVENT_TRIGGER0, XMC_BCCU_EVENT_TRIGGER1, XMC_BCCU_EVENT_FIFOEMPTY wants to disable\n + * at a same time, then event mask is = (XMC_BCCU_EVENT_TRIGGER0 | XMC_BCCU_EVENT_TRIGGER1 | + * XMC_BCCU_EVENT_FIFOEMPTY) \n + * + * @return None + * + * \parDescription:
+ * Disables multiple interrupt events at a same time using ORed values of @ref XMC_BCCU_EVENT_t by writing a register EVIER.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_EnableInterrupt()\n\n\n + */ +__STATIC_INLINE void XMC_BCCU_DisableInterrupt (XMC_BCCU_t *const bccu, uint32_t event) +{ + bccu->EVIER &= (uint32_t)~(event); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * + * @return Interrupt events flags at a same time using ORed values of @ref XMC_BCCU_EVENT_t. + * \parDescription:
+ * Retrieves interrupt event flags at the same time using ORed values of @ref XMC_BCCU_EVENT_t by reading the register \n + * EVFR. \n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SetEventFlag()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_ReadEventFlag (XMC_BCCU_t *const bccu) +{ + return (bccu->EVFR); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param flag_type Event flag mask to configure multiple events at a time using ORed values of @ref + * XMC_BCCU_EVENT_STATUS_t.\n + * For example: If XMC_BCCU_EVENT_STATUS_TRIGGER0, XMC_BCCU_EVENT_STATUS_TRIGGER1, XMC_BCCU_EVENT_STATUS_FIFOEMPTY + * wants to configure at a same time, then event mask is = (XMC_BCCU_EVENT_STATUS_TRIGGER0 | XMC_BCCU_EVENT_STATUS_TRIGGER1 | + * XMC_BCCU_EVENT_STATUS_FIFOEMPTY) \n + * + * @return None + * + * \parDescription:
+ * Configures multiple interrupt event flags at a same time using ORed values of @ref XMC_BCCU_EVENT_STATUS_t by writing a register EVFSR.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_ClearEventFlag(), XMC_BCCU_ReadEventFlag()\n\n\n + */ +__STATIC_INLINE void XMC_BCCU_SetEventFlag (XMC_BCCU_t *const bccu, uint32_t flag_type) +{ + bccu->EVFSR = flag_type; +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param flag_type event flag mask to clear multiple events at a time using ORed values of @ref + * XMC_BCCU_EVENT_STATUS_t.\n + * For example: If XMC_BCCU_EVENT_STATUS_TRIGGER0, XMC_BCCU_EVENT_STATUS_TRIGGER1, XMC_BCCU_EVENT_STATUS_FIFOEMPTY + * wants to clear at a same time, then event mask is = (XMC_BCCU_EVENT_STATUS_TRIGGER0 | XMC_BCCU_EVENT_STATUS_TRIGGER1 | + * XMC_BCCU_EVENT_STATUS_FIFOEMPTY) \n + * + * @return None + * + * \parDescription:
+ * Clears multiple interrupt event flags at a same time using ORed values of @ref XMC_BCCU_EVENT_STATUS_t by writing a + * register EVFSR.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SetEventFlag()\n\n\n + */ +__STATIC_INLINE void XMC_BCCU_ClearEventFlag (XMC_BCCU_t *const bccu, uint32_t flag_type) +{ + bccu->EVFCR = flag_type; +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param chan_no Specific channel number to enable. \b Range: 0 to 8\n + * + * @return None + * + * \parDescription:
+ * Enables a specific channel number using \a chan_no by writing a register CHEN.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_ConcurrentEnableChannels(), XMC_BCCU_DisableChannel()\n\n\n + */ +void XMC_BCCU_EnableChannel (XMC_BCCU_t *const bccu, uint32_t chan_no); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param chan_no Specific channel number to disable. \b Range: 0 to 8\n + * + * @return None + * + * \parDescription:
+ * Disables a specific channel number using \a chan_no by writing a register CHEN.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_ConcurrentDisableChannels(), XMC_BCCU_EnableChannel()\n\n\n + */ +void XMC_BCCU_DisableChannel (XMC_BCCU_t *const bccu, uint32_t chan_no); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param chan_no Specific channel number to enable specific channel. \b Range: 0 to 8\n + * @param level Passive level selection. Use type @ref XMC_BCCU_CH_ACTIVE_LEVEL_t.\n + * \b Range: XMC_BCCU_CH_ACTIVE_LEVEL_HIGH or XMC_BCCU_CH_ACTIVE_LEVEL_LOW + * + * @return None + * + * \parDescription:
+ * Configures passive level of specific channel using \a chan_no by writing a register bit CHOCON_CHyOP.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_ConcurrentSetOutputPassiveLevel()\n\n\n + */ +void XMC_BCCU_SetOutputPassiveLevel(XMC_BCCU_t *const bccu, uint32_t chan_no, XMC_BCCU_CH_ACTIVE_LEVEL_t level); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param chan_no Channel number to enable specific channel trap functionality. \b Range: 0 to 8 + * + * @return None + * + * \parDescription:
+ * Enables specific channel trap functionality using \a chan_no by writing a register bit CHOCON_CHyTPE.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_DisableTrap(), XMC_BCCU_ConcurrentEnableTrap(), XMC_BCCU_SelectTrapInput(), XMC_BCCU_SetTrapEdge()\n\n\n + */ +void XMC_BCCU_EnableTrap (XMC_BCCU_t *const bccu, uint32_t chan_no); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param chan_no Channel number to disable specific channel trap functionality. \b Range: 0 to 8 + * + * @return None + * + * \parDescription:
+ * Disables specific channel trap functionality using \a chan_no by writing a register bit CHOCON_CHyTPE.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_EnableTrap(), XMC_BCCU_ConcurrentDisableTrap()\n\n\n + */ +void XMC_BCCU_DisableTrap (XMC_BCCU_t *const bccu, uint32_t chan_no); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param chan_no Channel number to trigger a specific channel. \b Range: 0 to 8 + * @param trig_line Trigger line number to trigger a vadc. Use type @ref XMC_BCCU_CH_TRIGOUT_t.\n + * \b Range: XMC_BCCU_CH_TRIGOUT0 or XMC_BCCU_CH_TRIGOUT1 + * + * @return None + * + * \parDescription:
+ * Enables specific channel trigger using \a chan_no by writing a register bit CHOCON_CHyTPE.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_ConfigGlobalTrigger(), XMC_BCCU_DisableChannelTrigger(), XMC_BCCU_CH_ConfigTrigger()\n\n\n + */ +void XMC_BCCU_EnableChannelTrigger (XMC_BCCU_t *const bccu, uint32_t chan_no, XMC_BCCU_CH_TRIGOUT_t trig_line); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param chan_no Channel number to trigger a specific channel. \b Range: 0 to 8 + * + * @return None + * + * \parDescription:
+ * Disables specific channel trigger using \a chan_no by writing a register bit CHOCON_CHyTPE.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_EnableChannelTrigger()\n\n\n + */ +void XMC_BCCU_DisableChannelTrigger (XMC_BCCU_t *const bccu, uint32_t chan_no); + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * @param config Pointer to constant bccu channel configuration data structure. Use type @ref XMC_BCCU_CH_CONFIG_t. + * + * @return None + * + * \parDescription:
+ * Configures dimming engine source, dimming bypass selection, channel trigger edge, flicker watchdog selection and force + * trigger selection by using \a dim_sel, \a dim_bypass, \a trig_edge, \a flick_wd_en, \a force_trig_en by writing into a + * CHCONFIG register. And also configures packer settings: threshold, off and on compare levels, initial values of off & on + * counters, by writing into a CHCONFIG, PKCMP and PKCNTR registers.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_GlobalInit(), XMC_BCCU_DIM_Init()\n\n\n + */ +void XMC_BCCU_CH_Init (XMC_BCCU_CH_t *const channel, const XMC_BCCU_CH_CONFIG_t *const config); + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * @param edge Output transition selection. Use type @ref XMC_BCCU_CH_TRIG_EDGE_t. \n + * \b Range: XMC_BCCU_CH_TRIG_EDGE_PASS_TO_ACT or XMC_BCCU_CH_TRIG_EDGE_ACT_TO_PASS\n + * @param force_trig_en Forcing a trigger at output. \b Range: 0 or 1\n + * Generates a trigger if modulator output do not change for 256 bclk cycles\n + * + * @return None + * + * \parDescription:
+ * Configures global trigger settings: trigger edge, force trigger enable by writing a register CHCONFIG. + * And also configures force trigger enable, generates a trigger if modulator output do not change for 256 bclk cycles + * + * \parRelated APIs:
+ * XMC_BCCU_ConfigGlobalTrigger(), XMC_BCCU_EnableChannelTrigger()\n\n\n + */ +void XMC_BCCU_CH_ConfigTrigger (XMC_BCCU_CH_t *const channel, XMC_BCCU_CH_TRIG_EDGE_t edge, uint32_t force_trig_en); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param chan_no Specific channel number to start color change \b Range: 0 to 8\n + * + * @return None + * + * \parDescription:
+ * After channel initialization, the outcome of executing the API starts changing the color smoothly towards to target + * by writing a register bit CHSTRCON_CHyS.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_AbortLinearWalk(), XMC_BCCU_CH_SetTargetIntensity(), XMC_BCCU_IsLinearWalkComplete(), + * XMC_BCCU_ConcurrentStartLinearWalk()\n\n\n + */ +__STATIC_INLINE void XMC_BCCU_StartLinearWalk (XMC_BCCU_t *const bccu, uint32_t chan_no) +{ + bccu->CHSTRCON |= (uint32_t)(BCCU_CHSTRCON_CH0S_Msk << chan_no); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param chan_no Specific channel number to stop color change \b Range: 0 to 8\n + * + * @return None + * + * \parDescription:
+ * When the linear walk in progress, the outcome of executing the API is stopping the linear walk (i.e. color change) + * immediately for specific channels number using \a mask by writing a register CHSTRCON_CHyA.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_StartLinearWalk(), XMC_BCCU_ConcurrentAbortLinearWalk()\n\n\n + */ +__STATIC_INLINE void XMC_BCCU_AbortLinearWalk (XMC_BCCU_t *const bccu, uint32_t chan_no) +{ + bccu->CHSTRCON |= (uint32_t)(BCCU_CHSTRCON_CH0A_Msk << chan_no); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param chan_no Specific channel number to get an output level on last trigger. \b Range: 0 to 8\n + * + * @return Trap channel output level. \b Range: 0 or 1 + * \parDescription:
+ * Retrieves output level of specific channel number when last trigger occurred by reading the register bit LTCHOL_LTOLy. \n\n + * + * \parRelated APIs:
+ * XMC_BCCU_ReadLastTrigChanNr(), XMC_BCCU_ConfigGlobalTrigger(), XMC_BCCU_ConcurrentConfigTrigger(), + * XMC_BCCU_ReadGlobalTrigger(), XMC_BCCU_GlobalInit()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_GetChannelOutputLvlAtLastTrigger (XMC_BCCU_t *const bccu, uint32_t chan_no) +{ + return (uint32_t)((bccu->LTCHOL & (BCCU_LTCHOL_LTOL0_Msk << chan_no)) >> chan_no); +} + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * @param clk_div Prescaler factor. \b Range: 0 to 1023 + * + * @return None + * + * \parDescription:
+ * configure the linear walker clock prescaler factor by writing register bit CHCONFIG_LINPRES.\n\n + * + */ +void XMC_BCCU_CH_SetLinearWalkPrescaler (XMC_BCCU_CH_t *const channel, uint32_t clk_div); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param chan_no Channel number to know the linear walk completion status. \b Range: 0 to 8\n + * + * @return Linear walk completion status. \b Range: 0-Completed or 1-intensity start changing towards the target + * \parDescription:
+ * Retrieves linear walk completion status for specific channel using \a chan_no by reading the register bit CHSTRCON_CHyS. \n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_SetTargetIntensity(), XMC_BCCU_StartLinearWalk()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_IsLinearWalkComplete (XMC_BCCU_t *const bccu, uint32_t chan_no) +{ + return (uint32_t)((bccu->CHSTRCON & (BCCU_CHSTRCON_CH0S_Msk << chan_no)) >> chan_no); +} + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * @param ch_int Target channel intensity. \b Range: 0 to 4095 + * + * @return None + * + * \parDescription:
+ * Configures target channel intensity by writing register INTS, only be written if no shadow transfer of linear walk. + * Use XMC_BCCU_IsLinearWalkComplete() to know shadow transfer finished \n\n + * + * \parRelated APIs:
+ * XMC_BCCU_IsLinearWalkComplete(), XMC_BCCU_StartLinearWalk(), XMC_BCCU_CH_ReadIntensity()\n\n\n + */ +void XMC_BCCU_CH_SetTargetIntensity (XMC_BCCU_CH_t *const channel, uint32_t ch_int); + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * + * @return Current channel intensity. \b Range: 0 or 4095 + * \parDescription:
+ * Retrieves current channel intensity by reading the register INT.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_SetTargetIntensity()\n\n\n + */ +uint32_t XMC_BCCU_CH_ReadIntensity (XMC_BCCU_CH_t *const channel); + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * @param thresh Packer threshold value of FIFO. It defines number of queue stages must be filled before output generator + * starts generating the pulses. Until that, only off-bits are generated at the output.\n + * @param off_comp Packer off-time compare level. When the off-time counter reaches this, the measured on off time + * counters are stored into FIFO + * @param on_comp Packer on-time compare level. When the on-time counter reaches this, the measured on & off time + * counters are stored into FIFO + * + * @return None + * + * \parDescription:
+ * Enables packer by writing register bit CHCONFIG_PEN. And also configures packer threshold, off and on compare levels + * by writing register PKCMP. The main purpose of the packer is to decrease the average rate of switching of the output + * signal, to decrease the load on external switching circuits and improve EMC behavior\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_DisablePacker(), XMC_BCCU_CH_SetPackerThreshold(), XMC_BCCU_CH_SetPackerOffCompare(), XMC_BCCU_CH_SetPackerOnCompare\n\n\n + */ +void XMC_BCCU_CH_EnablePacker (XMC_BCCU_CH_t *const channel, uint32_t thresh, uint32_t off_comp, uint32_t on_comp); + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * @param val Packer threshold value of FIFO + * + * @return None + * + * \parDescription:
+ * Configures packer threshold by writing register bit CHCONFIG_PKTH\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_SetPackerOffCompare(), XMC_BCCU_CH_SetPackerOnCompare, XMC_BCCU_CH_ReadPackerThreshold()\n\n\n + */ +void XMC_BCCU_CH_SetPackerThreshold (XMC_BCCU_CH_t *const channel, uint32_t val); + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * @param level Packer off-time compare level. When the off-time counter reaches this, the measured on & off time counters + * are stored into FIFO + * + * @return None + * + * \parDescription:
+ * Configures packer off compare level by writing register bit PKCMP_OFFCMP\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_SetPackerThreshold(), XMC_BCCU_CH_SetPackerOnCompare(), XMC_BCCU_CH_SetPackerOffCounter(), + * XMC_BCCU_CH_ReadPackerOffCompare()\n\n\n + */ +void XMC_BCCU_CH_SetPackerOffCompare (XMC_BCCU_CH_t *const channel, uint32_t level); + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * @param level Packer on-time compare level. When the on-time counter reaches this, the measured on & off time counters + * are stored into FIFO + * + * @return None + * + * \parDescription:
+ * Configures packer on compare level by writing register bit PKCMP_ONCMP\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_SetPackerThreshold(), XMC_BCCU_CH_SetPackerOffCompare(), XMC_BCCU_CH_SetPackerOnCounter(), + * XMC_BCCU_CH_ReadPackerOnCompare()\n\n\n + */ +void XMC_BCCU_CH_SetPackerOnCompare (XMC_BCCU_CH_t *const channel, uint32_t level); + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * + * @return Packer threshold value of FIFO + * \parDescription:
+ * Retrieves packer threshold value by reading the register bit CHCONFIG_PKTH.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_SetPackerThreshold()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_CH_ReadPackerThreshold (XMC_BCCU_CH_t *const channel) +{ + return (uint32_t)((channel->CHCONFIG) & BCCU_CH_CHCONFIG_PKTH_Msk); +} + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * + * @return Packer off-time compare level. When the off-time counter reaches this, the measured on & off time counters + * are stored into FIFO + * \parDescription:
+ * Retrieves packer off compare level by reading the register bit PKCMP_OFFCMP.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_SetPackerOffCompare()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_CH_ReadPackerOffCompare (XMC_BCCU_CH_t *const channel) +{ + return (uint32_t)((channel->PKCMP) & BCCU_CH_PKCMP_OFFCMP_Msk); +} + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * + * @return Packer on-time compare level. When the on-time counter reaches this,
+ * the measured on & off time counters are stored into FIFO + * \parDescription:
+ * Retrieves packer on compare level by reading the register bit PKCMP_ONCMP.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_SetPackerOnCompare()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_CH_ReadPackerOnCompare (XMC_BCCU_CH_t *const channel) +{ + return (uint32_t)(((channel->PKCMP) & BCCU_CH_PKCMP_ONCMP_Msk) >> BCCU_CH_PKCMP_ONCMP_Pos); +} + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * + * @return None + * + * \parDescription:
+ * Disables packer by clearing writing register bit CHCONFIG_PEN. \n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_EnablePacker()\n\n\n + */ +void XMC_BCCU_CH_DisablePacker (XMC_BCCU_CH_t *const channel); + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * @param cnt_val Configures an initial packer off-time counter level, only if channel is disabled. Controls phase + * shift of the modulator output + * + * @return None + * + * \parDescription:
+ * Configures packer initial off counter value by writing register bit PKCNTR_OFFCNTVAL\n + * Note: Shall only be called if channel disabled.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_SetPackerOnCounter(), XMC_BCCU_CH_SetPackerOffCompare()\n\n\n + */ +void XMC_BCCU_CH_SetPackerOffCounter (XMC_BCCU_CH_t *const channel, uint32_t cnt_val); + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * @param cnt_val Configures an initial packer on-time counter level, only if channel is disabled. Controls phase shift + * of the modulator output + * + * @return None + * + * \parDescription:
+ * Configures packer initial on counter value by writing register bit PKCNTR_ONCNTVAL\n + * Note: Shall only be called if channel disabled.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_SetPackerOffCounter(), XMC_BCCU_CH_SetPackerOnCompare()\n\n\n + */ +void XMC_BCCU_CH_SetPackerOnCounter (XMC_BCCU_CH_t *const channel, uint32_t cnt_val); + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * @param sel Selects a dimming engine source of the channel. Use type @ref XMC_BCCU_CH_DIMMING_SOURCE_t + * + * @return None + * + * \parDescription:
+ * Configures dimming engine source by writing register bit CHCONFIG_DSEL\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_EnableDimmingBypass()\n\n\n + */ +void XMC_BCCU_CH_SelectDimEngine (XMC_BCCU_CH_t *const channel, XMC_BCCU_CH_DIMMING_SOURCE_t sel); + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * + * @return None + * + * \parDescription:
+ * Enables dimming engine bypass by writing register bit CHCONFIG_DBP. \n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_SelectDimEngine(), XMC_BCCU_CH_DisableDimmingBypass()\n\n\n + */ +void XMC_BCCU_CH_EnableDimmingBypass (XMC_BCCU_CH_t *const channel); + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * + * @return None + * + * \parDescription:
+ * Disables dimming engine bypass by clearing register bit CHCONFIG_DBP. \n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_EnableDimmingBypass()\n\n\n + */ +void XMC_BCCU_CH_DisableDimmingBypass (XMC_BCCU_CH_t *const channel); + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * + * @return None + * + * \parDescription:
+ * Enables gating feature by writing register bit CHCONFIG_GEN. The gating feature is used to enable fast control schemes, + * such as peak-current control and this has been controlled by Analog Comparator module.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_DisableGating()\n\n\n + */ +__STATIC_INLINE void XMC_BCCU_CH_EnableGating (XMC_BCCU_CH_t *const channel) +{ + channel->CHCONFIG |= (uint32_t)(BCCU_CH_CHCONFIG_GEN_Msk); +} + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * + * @return None + * + * \parDescription:
+ * Disables gating feature by writing register bit CHCONFIG_GEN. The gating feature is used to enable/disable fast control + * schemes, such as peak-current control and this has been controlled by Analog Comparator module. \n\n + * + * \parRelated APIs:
+ * XMC_BCCU_CH_EnableGating()\n\n\n + */ +__STATIC_INLINE void XMC_BCCU_CH_DisableGating (XMC_BCCU_CH_t *const channel) +{ + channel->CHCONFIG &= ~(uint32_t)(BCCU_CH_CHCONFIG_GEN_Msk); +} + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * + * @return None + * + * \parDescription:
+ * Enables flicker watchdog by writing register bit CHCONFIG_WEN. And limits the sigma-delta modulator output\n + * according to Watchdog threshold\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SetFlickerWDThreshold(), XMC_BCCU_ReadFlickerWDThreshold(), XMC_BCCU_CH_Init(), + * XMC_BCCU_CH_DisableFlickerWatchdog()\n\n\n + */ +__STATIC_INLINE void XMC_BCCU_CH_EnableFlickerWatchdog (XMC_BCCU_CH_t *const channel) +{ + channel->CHCONFIG |= (uint32_t)(BCCU_CH_CHCONFIG_WEN_Msk); +} + +/** + * + * @param channel Base address of the bccu channel. \b Range: BCCU0_CH0, BCCU0_CH1.. + * + * @return None + * + * \parDescription:
+ * Disables flicker watchdog by writing register bit CHCONFIG_WEN. No limits the sigma-delta modulator output + * according to Watchdog threshold\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SetFlickerWDThreshold(), XMC_BCCU_ReadFlickerWDThreshold(), XMC_BCCU_CH_Init(), + * XMC_BCCU_CH_EnableFlickerWatchdog()\n\n\n + */ +__STATIC_INLINE void XMC_BCCU_CH_DisableFlickerWatchdog (XMC_BCCU_CH_t *const channel) +{ + channel->CHCONFIG &= ~(uint32_t)(BCCU_CH_CHCONFIG_WEN_Msk); +} + +/** + * + * @param dim_engine Base address of the bccu dimming engine. \b Range: BCCU0_DE0, BCCU0_DE1, BCCU0_DE2 + * @param config Pointer to constant dimming engine configuration data structure. Use type @ref XMC_BCCU_DIM_CONFIG_t. + * + * @return None + * + * \parDescription:
+ * Configures dimming clock divider to adjust the fade rate, dither selection and exponential curve selection using \a + * dim_div, \a dither_en, \a cur_sel parameters and by writing into a DTT register.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_GlobalInit(), XMC_BCCU_CH_Init()\n\n\n + */ +void XMC_BCCU_DIM_Init (XMC_BCCU_DIM_t *const dim_engine, const XMC_BCCU_DIM_CONFIG_t *const config); + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param dim_no Specific dimming engine number to enable. \b Range: 0 to 2\n + * + * @return None + * + * \parDescription:
+ * Enables a specific dimming engine number using \a dim_no by writing a register bit DEEN_EDEy.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_DisableDimmingEngine(), XMC_BCCU_ConcurrentEnableDimmingEngine()\n\n\n + */ +__STATIC_INLINE void XMC_BCCU_EnableDimmingEngine (XMC_BCCU_t *const bccu, uint32_t dim_no) +{ + bccu->DEEN |= (uint32_t)(BCCU_DEEN_EDE0_Msk << dim_no); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param dim_no Specific dimming engine number to disable. \b Range: 0 to 2\n + * + * @return None + * + * \parDescription:
+ * Disables a specific dimming engine number using \a dim_no by clearing a register bit DEEN_EDEy.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_EnableDimmingEngine(), XMC_BCCU_ConcurrentDisableDimmingEngine()\n\n\n + */ +__STATIC_INLINE void XMC_BCCU_DisableDimmingEngine (XMC_BCCU_t *const bccu, uint32_t dim_no) +{ + bccu->DEEN &= ~(uint32_t)(BCCU_DEEN_EDE0_Msk << dim_no); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param dim_no Specific dimming engine number to start dimming process \b Range: 0 to 2\n + * + * @return None + * + * \parDescription:
+ * After dimming engine initialization, the outcome of executing the API starts changing the brightness towards to target + * by writing a register bit DESTRCON_DEyS.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_AbortDimming(), XMC_BCCU_ConcurrentStartDimming()\n\n\n + */ +__STATIC_INLINE void XMC_BCCU_StartDimming (XMC_BCCU_t *const bccu, uint32_t dim_no) +{ + bccu->DESTRCON = (uint32_t)(BCCU_DESTRCON_DE0S_Msk << dim_no); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param dim_no Specific dimming engine number to stop dimming process \b Range: 0 to 2\n + * + * @return None + * + * \parDescription:
+ * When the dimming in progress, the outcome of executing the API is stopping the dimming (i.e. fading) + * immediately for specific dimming engine number \a dim_no by writing a register bit DESTRCON_DEyA.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_StartDimming(), XMC_BCCU_ConcurrentAbortDimming()\n\n\n + */ +__STATIC_INLINE void XMC_BCCU_AbortDimming (XMC_BCCU_t *const bccu, uint32_t dim_no) +{ + bccu->DESTRCON = (uint32_t)(BCCU_DESTRCON_DE0A_Msk << dim_no); +} + +/** + * + * @param bccu Base address of the bccu module. \b Range: BCCU0 + * @param dim_no Specific dimming engine number to know the dimming status. \b Range: 0 to 2\n + * + * @return Dimming completion status. \b Range: 0-Completed or 1-start change towards the target + * \parDescription:
+ * Retrieves dimming completion status for specific dimming engine number using \a dim_no by reading the register bit + * DESTRCON_DEyS. \n\n + * + * \parRelated APIs:
+ * XMC_BCCU_DIM_SetTargetDimmingLevel(), XMC_BCCU_StartDimming()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_IsDimmingFinished (XMC_BCCU_t *const bccu, uint32_t dim_no) +{ + return (uint32_t)((bccu->DESTRCON & (BCCU_DESTRCON_DE0S_Msk << dim_no)) >> dim_no); +} + +/** + * + * @param dim_engine Base address of the bccu dimming engine. \b Range: BCCU0_DE0, BCCU0_DE1, BCCU0_DE2 + * @param level Target dimming level. \b Range: 0 to 4095 + * + * @return None + * + * \parDescription:
+ * Configures target dimming level by writing register DLS, only be written if no shadow transfer of dimming. + * Use XMC_BCCU_IsDimmingFinished() to know shadow transfer finished \n\n + * + * \parRelated APIs:
+ * XMC_BCCU_StartDimming(), XMC_BCCU_IsDimmingFinished(), XMC_BCCU_SetGlobalDimmingLevel(), \n + * XMC_BCCU_DIM_ReadDimmingLevel()\n\n\n + */ +void XMC_BCCU_DIM_SetTargetDimmingLevel (XMC_BCCU_DIM_t *const dim_engine, uint32_t level); + +/** + * + * @param dim_engine Base address of the bccu dimming engine. \b Range: BCCU0_DE0, BCCU0_DE1, BCCU0_DE2 + * + * @return Current dimming level. \b Range: 0 or 4095 + * \parDescription:
+ * Retrieves current dimming level by reading the register DE_DL_DLEV.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_DIM_SetTargetDimmingLevel()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_DIM_ReadDimmingLevel (XMC_BCCU_DIM_t *const dim_engine) +{ + return (uint32_t)(dim_engine->DL & BCCU_DE_DL_DLEV_Msk); +} + +/** + * + * @param dim_engine Base address of the bccu dimming engine. \b Range: BCCU0_DE0, BCCU0_DE1, BCCU0_DE2 + * @param div Dimming clock divider, used to adjust the fade rate. If 0, the dimming level + as same as target dimming level on shadow transfer\n + * + * @return None + * + * \parDescription:
+ * Configures dimming clock divider by writing register bit DE_DTT_DIMDIV.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_SetDimClockPrescaler(), XMC_BCCU_DIM_ReadDimDivider()\n\n\n + */ +void XMC_BCCU_DIM_SetDimDivider (XMC_BCCU_DIM_t *const dim_engine, uint32_t div); + +/** + * + * @param dim_engine Base address of the bccu dimming engine. \b Range: BCCU0_DE0, BCCU0_DE1, BCCU0_DE2 + * + * @return Dimming clock divider value. \b Range: 0 to 1023 + * \parDescription:
+ * Retrieves dimming clock divider value by reading the register BCCU_DE_DTT_DIMDIV.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_DIM_SetDimDivider()\n\n\n + */ + __STATIC_INLINE uint32_t XMC_BCCU_DIM_ReadDimDivider(XMC_BCCU_DIM_t *const dim_engine) +{ + return (uint32_t)(dim_engine->DTT & BCCU_DE_DTT_DIMDIV_Msk); +} + +/** + * + * @param dim_engine Base address of the bccu dimming engine. \b Range: BCCU0_DE0, BCCU0_DE1, BCCU0_DE2 + * @param dither_en Dither enable. Dithering added for every dimming step if dimming level < 128.
+ * @param sel Type of exponential curve. Use type @ref XMC_BCCU_DIM_CURVE_t. Note: If dither + enabled, the configuration is being ignored\n + * + * @return None + * + * \parDescription:
+ * Configures dimming clock curve by writing register bit DE_DTT_CSEL.\n\n + * + * \parRelated APIs:
+ * XMC_BCCU_DIM_Init()\n\n\n + */ +void XMC_BCCU_DIM_ConfigDimCurve (XMC_BCCU_DIM_t *const dim_engine, uint32_t dither_en, XMC_BCCU_DIM_CURVE_t sel); + +/** + * + * @param dim_engine Base address of the bccu dimming engine. \b Range: BCCU0_DE0, BCCU0_DE1, BCCU0_DE2 + * + * @return Type of exponential curve \b Range: XMC_BCCU_DIM_CURVE_COARSE or XMC_BCCU_DIM_CURVE_FINE + * \parDescription:
+ * Retrieves exponential curve type by reading the register bit BCCU_DE_DTT_CSEL. \n\n + * + * \parRelated APIs:
+ * XMC_BCCU_DIM_ConfigDimCurve(), XMC_BCCU_IsDitherEnable()\n\n\n + */ +__STATIC_INLINE XMC_BCCU_DIM_CURVE_t XMC_BCCU_DIM_GetDimCurve (XMC_BCCU_DIM_t *const dim_engine) +{ + return (XMC_BCCU_DIM_CURVE_t)((dim_engine->DTT & BCCU_DE_DTT_CSEL_Msk) >> BCCU_DE_DTT_CSEL_Pos); +} + +/** + * + * @param dim_engine Base address of the bccu dimming engine. \b Range: BCCU0_DE0, BCCU0_DE1, BCCU0_DE2 + * + * @return Dither enable status. \b Range: 1-Enabled or 0-Disabled + * \parDescription:
+ * Retrieves dither enable status by reading the register bit BCCU_DE_DTT_DTEN. \n\n + * + * \parRelated APIs:
+ * XMC_BCCU_DIM_ConfigDimCurve(), XMC_BCCU_DIM_GetDimCurve()\n\n\n + */ +__STATIC_INLINE uint32_t XMC_BCCU_IsDitherEnable(XMC_BCCU_DIM_t *const dim_engine) +{ + return (uint32_t)((dim_engine->DTT & BCCU_DE_DTT_DTEN_Msk) >> BCCU_DE_DTT_DTEN_Pos); +} + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* BCCU0 */ + +#endif /* XMC_BCCU_H */ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_can.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_can.h index 73962299..a72ad65e 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_can.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_can.h @@ -1,12 +1,12 @@ /** * @file xmc_can.h - * @date 2015-10-27 + * @date 2016-06-07 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -57,6 +57,10 @@ * * 2015-09-15: * - Added "xmc_can_map.h" include
+ * + * 2016-06-07: + * - Added XMC_CAN_IsPanelControlReady() + * * Details of use for node configuration related APIs
* Please use the XMC_CAN_NODE_SetInitBit() and XMC_CAN_NODE_EnableConfigurationChange() before calling node configuration * related APIs. @@ -80,6 +84,8 @@ * XMC_CAN_NODE_ResetInitBit(CAN_NODE0) * @endcode * + * 2016-06-20: + * - Fixed bug in XMC_CAN_MO_Config()
* @endcond * */ @@ -641,6 +647,25 @@ void XMC_CAN_Enable(XMC_CAN_t *const obj); void XMC_CAN_AllocateMOtoNodeList(XMC_CAN_t *const obj, const uint8_t node_num, const uint8_t mo_num); +/** + * + * @param obj Pointer pointing to XMC_CAN Global Initialization structure. Defines CAN global registers,refer CAN_NODE_TypeDef + * for details. + * + * @return Ready status of list controller + * + * \parDescription:
+ * Returns ready status of the list controller + * + * \parRelated APIs:
+ * XMC_CAN_PanelControl() + * + */ +__STATIC_INLINE bool XMC_CAN_IsPanelControlReady(XMC_CAN_t *const obj) +{ + return (bool)((obj->PANCTR & (CAN_PANCTR_BUSY_Msk | CAN_PANCTR_RBUSY_Msk)) == 0); +} + /** * * @param obj Pointer pointing to XMC_CAN Global Initialization structure. Defines CAN global registers,refer CAN_NODE_TypeDef diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_can_map.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_can_map.h index c00f1476..c689f0ff 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_can_map.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_can_map.h @@ -1,12 +1,12 @@ /** * @file xmc_can_map.h - * @date 2015-10-27 + * @date 2015-10-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -351,7 +351,17 @@ #define CAN_NODE5_RXD_P8_0 XMC_CAN_NODE_RECEIVE_INPUT_RXDCC #endif -#if (UC_SERIES == XMC47) || (UC_SERIES == XMC48) || (UC_SERIES == XMC14) +#if (UC_DEVICE == XMC4300) && (UC_PACKAGE == LQFP100) +#define CAN_NODE0_RXD_P1_5 XMC_CAN_NODE_RECEIVE_INPUT_RXDCA +#define CAN_NODE0_RXD_P14_3 XMC_CAN_NODE_RECEIVE_INPUT_RXDCB +#define CAN_NODE0_RXD_P3_12 XMC_CAN_NODE_RECEIVE_INPUT_RXDCC +#define CAN_NODE1_RXD_P2_6 XMC_CAN_NODE_RECEIVE_INPUT_RXDCA +#define CAN_NODE1_RXD_P1_13 XMC_CAN_NODE_RECEIVE_INPUT_RXDCC +#define CAN_NODE1_RXD_P1_4 XMC_CAN_NODE_RECEIVE_INPUT_RXDCD +#define CAN_NODE1_RXD_CAN0INS XMC_CAN_NODE_RECEIVE_INPUT_RXDCF +#endif + +#if (UC_SERIES == XMC47) || (UC_SERIES == XMC48) || (UC_SERIES == XMC43)|| (UC_SERIES == XMC14) #define CAN_MO0 ((CAN_MO_TypeDef *)&(CAN_MO->MO[0])) #define CAN_MO1 ((CAN_MO_TypeDef *)&(CAN_MO->MO[1])) #define CAN_MO2 ((CAN_MO_TypeDef *)&(CAN_MO->MO[2])) @@ -387,7 +397,7 @@ #endif -#if (UC_SERIES == XMC47) || (UC_SERIES == XMC48) +#if (UC_SERIES == XMC47) || (UC_SERIES == XMC48)|| (UC_SERIES == XMC43) #define CAN_MO32 ((CAN_MO_TypeDef *)&(CAN_MO->MO[32])) #define CAN_MO33 ((CAN_MO_TypeDef *)&(CAN_MO->MO[33])) #define CAN_MO34 ((CAN_MO_TypeDef *)&(CAN_MO->MO[34])) @@ -420,6 +430,7 @@ #define CAN_MO61 ((CAN_MO_TypeDef *)&(CAN_MO->MO[61])) #define CAN_MO62 ((CAN_MO_TypeDef *)&(CAN_MO->MO[62])) #define CAN_MO63 ((CAN_MO_TypeDef *)&(CAN_MO->MO[63])) +#if (UC_SERIES != XMC43) #define CAN_MO64 ((CAN_MO_TypeDef *)&(CAN_MO->MO[64])) #define CAN_MO65 ((CAN_MO_TypeDef *)&(CAN_MO->MO[65])) #define CAN_MO66 ((CAN_MO_TypeDef *)&(CAN_MO->MO[66])) @@ -613,5 +624,6 @@ #define CAN_MO254 ((CAN_MO_TypeDef *)&(CAN_MO->MO[254])) #define CAN_MO255 ((CAN_MO_TypeDef *)&(CAN_MO->MO[255])) #endif +#endif #endif /* XMC_CAN_MAP_H*/ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ccu4.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ccu4.h index 7851f24c..d2b6e862 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ccu4.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ccu4.h @@ -1,12 +1,12 @@ /** * @file xmc_ccu4.h - * @date 2015-10-27 + * @date 2016-05-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -60,7 +60,14 @@ * - XMC_CCU4_SLICE_MULTI_IRQ_ID_t is added to support the XMC_CCU4_SLICE_EnableMultipleEvents() and * XMC_CCU4_SLICE_DisableMultipleEvents() APIs. * - DOC updates for the newly added APIs. - * + * + * 2016-03-09: + * - Optimization of write only registers + * + * 2016-05-20: + * - Added XMC_CCU4_SLICE_StopClearTimer() + * - Changed implementation of XMC_CCU4_SLICE_StopTimer() and XMC_CCU4_SLICE_ClearTimer() to avoid RMW access + * * @endcond */ @@ -1443,7 +1450,7 @@ __STATIC_INLINE void XMC_CCU4_SLICE_StartTimer(XMC_CCU4_SLICE_t *const slice) __STATIC_INLINE void XMC_CCU4_SLICE_StopTimer(XMC_CCU4_SLICE_t *const slice) { XMC_ASSERT("XMC_CCU4_SLICE_StopTimer:Invalid Slice Pointer", XMC_CCU4_IsValidSlice(slice)); - slice->TCCLR |= (uint32_t) CCU4_CC4_TCCLR_TRBC_Msk; + slice->TCCLR = (uint32_t) CCU4_CC4_TCCLR_TRBC_Msk; } /** @@ -1462,7 +1469,24 @@ __STATIC_INLINE void XMC_CCU4_SLICE_StopTimer(XMC_CCU4_SLICE_t *const slice) __STATIC_INLINE void XMC_CCU4_SLICE_ClearTimer(XMC_CCU4_SLICE_t *const slice) { XMC_ASSERT("XMC_CCU4_SLICE_ClearTimer:Invalid Slice Pointer", XMC_CCU4_IsValidSlice(slice)); - slice->TCCLR |= (uint32_t) CCU4_CC4_TCCLR_TCC_Msk; + slice->TCCLR = (uint32_t) CCU4_CC4_TCCLR_TCC_Msk; +} + +/** + * @param slice Constant pointer to CC4 Slice + * @return
+ * None
+ * + * \parDescription:
+ * Stops and resets the timer count to zero, by setting CC4yTCCLR.TCC and CC4yTCCLR.TRBC bit.\n\n + * + * \parRelated APIs:
+ * XMC_CCU4_SLICE_StartTimer(). + */ +__STATIC_INLINE void XMC_CCU4_SLICE_StopClearTimer(XMC_CCU4_SLICE_t *const slice) +{ + XMC_ASSERT("XMC_CCU4_SLICE_StopClearTimer:Invalid Slice Pointer", XMC_CCU4_IsValidSlice(slice)); + slice->TCCLR = CCU4_CC4_TCCLR_TRBC_Msk | CCU4_CC4_TCCLR_TCC_Msk; } /** @@ -1682,7 +1706,7 @@ __STATIC_INLINE uint16_t XMC_CCU4_SLICE_GetTimerCompareMatch(const XMC_CCU4_SLIC __STATIC_INLINE void XMC_CCU4_EnableShadowTransfer(XMC_CCU4_MODULE_t *const module, const uint32_t shadow_transfer_msk) { XMC_ASSERT("XMC_CCU4_EnableShadowTransfer:Invalid Slice Pointer", XMC_CCU4_IsValidModule(module)); - module->GCSS |= (uint32_t)shadow_transfer_msk; + module->GCSS = (uint32_t)shadow_transfer_msk; } /** diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ccu8.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ccu8.h index c98aaa09..69f5c3c8 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ccu8.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ccu8.h @@ -1,12 +1,12 @@ /** * @file xmc_ccu8.h - * @date 2015-10-27 + * @date 2016-05-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -75,6 +75,13 @@ * XMC_CCU8_SLICE_DisableMultipleEvents() APIs. * - DOC updates for the newly added APIs. * + * 2016-03-09: + * - Optimization of write only registers + * + * 2016-05-20: + * - Added XMC_CCU8_SLICE_StopClearTimer() + * - Changed XMC_CCU8_SLICE_StopTimer() and XMC_CCU8_SLICE_ClearTimer() + * * @endcond */ @@ -1780,7 +1787,7 @@ __STATIC_INLINE void XMC_CCU8_SLICE_StartTimer(XMC_CCU8_SLICE_t *const slice) __STATIC_INLINE void XMC_CCU8_SLICE_StopTimer(XMC_CCU8_SLICE_t *const slice) { XMC_ASSERT("XMC_CCU8_SLICE_StopTimer:Invalid Slice Pointer", XMC_CCU8_IsValidSlice(slice)); - slice->TCCLR |= (uint32_t) CCU8_CC8_TCCLR_TRBC_Msk; + slice->TCCLR = (uint32_t) CCU8_CC8_TCCLR_TRBC_Msk; } /** @@ -1799,7 +1806,24 @@ __STATIC_INLINE void XMC_CCU8_SLICE_StopTimer(XMC_CCU8_SLICE_t *const slice) __STATIC_INLINE void XMC_CCU8_SLICE_ClearTimer(XMC_CCU8_SLICE_t *const slice) { XMC_ASSERT("XMC_CCU8_SLICE_ClearTimer:Invalid Slice Pointer", XMC_CCU8_IsValidSlice(slice)); - slice->TCCLR |= (uint32_t) CCU8_CC8_TCCLR_TCC_Msk; + slice->TCCLR = (uint32_t) CCU8_CC8_TCCLR_TCC_Msk; +} + +/** + * @param slice Constant pointer to CC8 Slice + * @return
+ * None
+ * + * \parDescription:
+ * Stops and resets the timer count to zero, by setting CC8yTCCLR.TCC and CC8yTCCLR.TRBC bit.\n\n + * + * \parRelated APIs:
+ * XMC_CCU8_SLICE_StartTimer(). + */ +__STATIC_INLINE void XMC_CCU8_SLICE_StopClearTimer(XMC_CCU8_SLICE_t *const slice) +{ + XMC_ASSERT("XMC_CCU8_SLICE_StopClearTimer:Invalid Slice Pointer", XMC_CCU8_IsValidSlice(slice)); + slice->TCCLR = CCU8_CC8_TCCLR_TRBC_Msk | CCU8_CC8_TCCLR_TCC_Msk; } /** @@ -2056,7 +2080,7 @@ uint16_t XMC_CCU8_SLICE_GetTimerCompareMatch(const XMC_CCU8_SLICE_t *const slice __STATIC_INLINE void XMC_CCU8_EnableShadowTransfer(XMC_CCU8_MODULE_t *const module, const uint32_t shadow_transfer_msk) { XMC_ASSERT("XMC_CCU8_EnableShadowTransfer:Invalid module Pointer", XMC_CCU8_IsValidModule(module)); - module->GCSS |= (uint32_t)shadow_transfer_msk; + module->GCSS = (uint32_t)shadow_transfer_msk; } /** diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_common.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_common.h index cfda3361..f2a05047 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_common.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_common.h @@ -1,36 +1,36 @@ /** * @file xmc_common.h - * @date 2015-10-27 + * @date 2016-05-30 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the - * following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following - * disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the distribution. - * - * Neither the name of the copyright holders 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 HOLDER 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. - * - * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with - * Infineon Technologies AG dave@infineon.com). + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with + * Infineon Technologies AG dave@infineon.com). ********************************************************************************************************************* * * Change History @@ -41,7 +41,13 @@ * - Brief section updated * - Added XMC_LIB_VERSION macro * - * @endcond + * 2016-02-26: + * - Updated XMC_LIB_VERSION macro to v2.1.6 + * + * 2016-05-30: + * - Updated XMC_LIB_VERSION macro to v2.1.8 + * + * @endcond * */ @@ -62,7 +68,7 @@ /** * @addtogroup COMMON - * @brief Common APIs to all peripherals for XMC microcontroller family + * @brief Common APIs to all peripherals for XMC microcontroller family * @{ */ @@ -70,9 +76,9 @@ * MACROS *********************************************************************************************************************/ #define XMC_LIB_MAJOR_VERSION (2U) -#define XMC_LIB_MINOR_VERSION (0U) -#define XMC_LIB_PATCH_VERSION (2U) - +#define XMC_LIB_MINOR_VERSION (1U) +#define XMC_LIB_PATCH_VERSION (8U) + #define XMC_LIB_VERSION ((XMC_LIB_MAJOR_VERSION << 16U) + (XMC_LIB_MINOR_VERSION << 8U) + XMC_LIB_PATCH_VERSION) /* Define WEAK attribute */ @@ -124,7 +130,7 @@ XMC_PRIOARRAY_t prioarray_def_##name = {(size), (prioarray_m_##name)}; /* * */ -typedef struct XMC_DRIVER_VERSION +typedef struct XMC_DRIVER_VERSION { uint8_t major; uint8_t minor; diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dac.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dac.h index a76e4be6..fba5a0ad 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dac.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dac.h @@ -1,12 +1,12 @@ /** * @file xmc_dac.h - * @date 2015-10-27 + * @date 2015-08-31 * * @cond ********************************************************************************** - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_device.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_device.h index e812c195..7ce1c923 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_device.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_device.h @@ -1,12 +1,12 @@ /** * @file xmc_device.h - * @date 2015-10-27 + * @date 2016-07-21 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -42,6 +42,17 @@ * 2015-09-23: * - Added XMC14 and XMC48/47 * + * 2015-11-19: + * - Added XMC43 + * + * 2016-02-26: + * - Fixed CCU8 version for XMC43/47/48 + * + * 2016-06-14: + * - Added XMC1201_T028x0016, XMC1202_T016x0064, XMC1301_T016x0032, XMC1302_Q040x0200, + * XMC1302_T028x0016, XMC1402_T038x0032, XMC1402_T038x0064, XMC1402_T038x0128, + * XMC1403_Q040x0064, XMC1403_Q040x0128, XMC1403_Q040x0200, XMC1402_T038x0200 + * XMC1402_Q040x0200, XMC1402_Q048x0200, XMC1201_T028x0032 * @endcond * */ @@ -58,6 +69,7 @@ #define XMC47 (47) #define XMC45 (45) #define XMC44 (44) +#define XMC43 (43) #define XMC42 (42) #define XMC41 (41) #define XMC14 (14) @@ -73,6 +85,7 @@ #define XMC4504 (4504) #define XMC4400 (4400) #define XMC4402 (4402) +#define XMC4300 (4300) #define XMC4200 (4200) #define XMC4100 (4100) #define XMC4104 (4104) @@ -113,7 +126,7 @@ #define UC_FLASH (2048UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4800_F144x2048) #define UC_FAMILY XMC4 @@ -123,7 +136,7 @@ #define UC_FLASH (2048UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4800_F100x2048) #define UC_FAMILY XMC4 @@ -133,7 +146,7 @@ #define UC_FLASH (2048UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4800_E196x1536) #define UC_FAMILY XMC4 @@ -143,7 +156,7 @@ #define UC_FLASH (1536UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4800_F144x1536) #define UC_FAMILY XMC4 @@ -153,7 +166,7 @@ #define UC_FLASH (1536UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4800_F100x1536) #define UC_FAMILY XMC4 @@ -163,7 +176,7 @@ #define UC_FLASH (1536UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4800_E196x1024) #define UC_FAMILY XMC4 @@ -173,7 +186,7 @@ #define UC_FLASH (1024UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4800_F144x1024) #define UC_FAMILY XMC4 @@ -183,7 +196,7 @@ #define UC_FLASH (1024UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4800_F100x1024) #define UC_FAMILY XMC4 @@ -193,7 +206,7 @@ #define UC_FLASH (1024UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4700_E196x2048) #define UC_FAMILY XMC4 @@ -203,7 +216,7 @@ #define UC_FLASH (2048UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4700_F144x2048) #define UC_FAMILY XMC4 @@ -213,7 +226,7 @@ #define UC_FLASH (2048UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4700_F100x2048) #define UC_FAMILY XMC4 @@ -223,7 +236,7 @@ #define UC_FLASH (2048UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4700_E196x1536) #define UC_FAMILY XMC4 @@ -233,7 +246,7 @@ #define UC_FLASH (1536UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4700_F144x1536) #define UC_FAMILY XMC4 @@ -243,7 +256,7 @@ #define UC_FLASH (1536UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4700_F100x1536) #define UC_FAMILY XMC4 @@ -253,7 +266,7 @@ #define UC_FLASH (1536UL) #define MULTICAN_PLUS #define CCU4V2 -#define CCU8V1 +#define CCU8V2 #elif defined(XMC4500_E144x1024) #define UC_FAMILY XMC4 @@ -381,6 +394,16 @@ #define CCU4V1 #define CCU8V1 +#elif defined(XMC4300_F100x256) +#define UC_FAMILY XMC4 +#define UC_SERIES XMC43 +#define UC_DEVICE XMC4300 +#define UC_PACKAGE LQFP100 +#define UC_FLASH (256UL) +#define MULTICAN_PLUS +#define CCU4V2 +#define CCU8V2 + #elif defined(XMC4200_E64x256) #define UC_FAMILY XMC4 #define UC_SERIES XMC42 @@ -699,6 +722,22 @@ #define UC_FLASH (200UL) #define CCU4V2 +#elif defined(XMC1201_T028x0032) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC12 +#define UC_DEVICE XMC1201 +#define UC_PACKAGE TSSOP28 +#define UC_FLASH (32UL) +#define CCU4V2 + +#elif defined(XMC1201_T028x0016) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC12 +#define UC_DEVICE XMC1201 +#define UC_PACKAGE TSSOP28 +#define UC_FLASH (16UL) +#define CCU4V2 + #elif defined(XMC1202_Q024x0016) #define UC_FAMILY XMC1 #define UC_SERIES XMC12 @@ -747,6 +786,14 @@ #define UC_FLASH (32UL) #define CCU4V2 +#elif defined(XMC1202_T016x0064) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC12 +#define UC_DEVICE XMC1202 +#define UC_PACKAGE TSSOP16 +#define UC_FLASH (64UL) +#define CCU4V2 + #elif defined(XMC1202_T028x0016) #define UC_FAMILY XMC1 #define UC_SERIES XMC12 @@ -842,6 +889,15 @@ #define CCU4V2 #define CCU8V2 +#elif defined(XMC1301_T016x0032) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC13 +#define UC_DEVICE XMC1301 +#define UC_PACKAGE TSSOP16 +#define UC_FLASH (32UL) +#define CCU4V2 +#define CCU8V2 + #elif defined(XMC1301_T038x0008) #define UC_FAMILY XMC1 #define UC_SERIES XMC13 @@ -939,6 +995,15 @@ #define CCU4V2 #define CCU8V2 +#elif defined(XMC1302_Q040x0200) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC13 +#define UC_DEVICE XMC1302 +#define UC_PACKAGE VQFN40 +#define UC_FLASH (200UL) +#define CCU4V2 +#define CCU8V2 + #elif defined(XMC1302_T038x0016) #define UC_FAMILY XMC1 #define UC_SERIES XMC13 @@ -984,6 +1049,15 @@ #define CCU4V2 #define CCU8V2 +#elif defined(XMC1302_T028x0016) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC13 +#define UC_DEVICE XMC1302 +#define UC_PACKAGE TSSOP28 +#define UC_FLASH (16UL) +#define CCU4V2 +#define CCU8V2 + #elif defined(XMC1302_T016x0008) #define UC_FAMILY XMC1 #define UC_SERIES XMC13 @@ -1043,6 +1117,42 @@ #define UC_FLASH (128UL) #define CCU4V3 +#elif defined(XMC1402_T038x0032) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC14 +#define UC_DEVICE XMC1402 +#define UC_PACKAGE TSSOP38 +#define UC_FLASH (32UL) +#define CCU4V3 +#define CCU8V3 + +#elif defined(XMC1402_T038x0064) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC14 +#define UC_DEVICE XMC1402 +#define UC_PACKAGE TSSOP38 +#define UC_FLASH (64UL) +#define CCU4V3 +#define CCU8V3 + +#elif defined(XMC1402_T038x0128) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC14 +#define UC_DEVICE XMC1402 +#define UC_PACKAGE TSSOP38 +#define UC_FLASH (128UL) +#define CCU4V3 +#define CCU8V3 + +#elif defined(XMC1402_T038x0200) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC14 +#define UC_DEVICE XMC1402 +#define UC_PACKAGE TSSOP38 +#define UC_FLASH (200UL) +#define CCU4V3 +#define CCU8V3 + #elif defined(XMC1402_Q040x0032) #define UC_FAMILY XMC1 #define UC_SERIES XMC14 @@ -1070,6 +1180,15 @@ #define CCU4V3 #define CCU8V3 +#elif defined(XMC1402_Q040x0200) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC14 +#define UC_DEVICE XMC1402 +#define UC_PACKAGE VQFN40 +#define UC_FLASH (200UL) +#define CCU4V3 +#define CCU8V3 + #elif defined(XMC1402_Q048x0032) #define UC_FAMILY XMC1 #define UC_SERIES XMC14 @@ -1097,6 +1216,15 @@ #define CCU4V3 #define CCU8V3 +#elif defined(XMC1402_Q048x0200) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC14 +#define UC_DEVICE XMC1402 +#define UC_PACKAGE VQFN48 +#define UC_FLASH (200UL) +#define CCU4V3 +#define CCU8V3 + #elif defined(XMC1402_Q064x0064) #define UC_FAMILY XMC1 #define UC_SERIES XMC14 @@ -1179,6 +1307,33 @@ #define MULTICAN_PLUS #define CCU4V3 +#elif defined(XMC1403_Q040x0064) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC14 +#define UC_DEVICE XMC1403 +#define UC_PACKAGE VQFN40 +#define UC_FLASH (64UL) +#define MULTICAN_PLUS +#define CCU4V3 + +#elif defined(XMC1403_Q040x0128) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC14 +#define UC_DEVICE XMC1403 +#define UC_PACKAGE VQFN40 +#define UC_FLASH (128UL) +#define MULTICAN_PLUS +#define CCU4V3 + +#elif defined(XMC1403_Q040x0200) +#define UC_FAMILY XMC1 +#define UC_SERIES XMC14 +#define UC_DEVICE XMC1403 +#define UC_PACKAGE VQFN40 +#define UC_FLASH (200UL) +#define MULTICAN_PLUS +#define CCU4V3 + #elif defined(XMC1403_Q064x0064) #define UC_FAMILY XMC1 #define UC_SERIES XMC14 @@ -1303,11 +1458,19 @@ #if UC_SERIES == XMC45 #include "XMC4500.h" #define PERIPHERAL_RESET_SUPPORTED +#define USB_OTG_SUPPORTED #elif UC_SERIES == XMC44 #include "XMC4400.h" #define CLOCK_GATING_SUPPORTED #define PERIPHERAL_RESET_SUPPORTED +#define USB_OTG_SUPPORTED + +#elif UC_SERIES == XMC43 +#include "XMC4300.h" +#define CLOCK_GATING_SUPPORTED +#define PERIPHERAL_RESET_SUPPORTED +#define USB_OTG_SUPPORTED #elif UC_SERIES == XMC42 #include "XMC4200.h" @@ -1323,11 +1486,13 @@ #include "XMC4700.h" #define CLOCK_GATING_SUPPORTED #define PERIPHERAL_RESET_SUPPORTED +#define USB_OTG_SUPPORTED #elif UC_SERIES == XMC48 #include "XMC4800.h" #define CLOCK_GATING_SUPPORTED #define PERIPHERAL_RESET_SUPPORTED +#define USB_OTG_SUPPORTED #elif UC_SERIES == XMC11 #include "XMC1100.h" diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dma.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dma.h index 505ea26c..a42a9c61 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dma.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dma.h @@ -1,13 +1,13 @@ /** * @file xmc_dma.h - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dma_map.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dma_map.h index 25c639d3..e8054f7d 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dma_map.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dma_map.h @@ -1,13 +1,13 @@ /** * @file xmc_dma_map.h - * @date 2015-10-27 + * @date 2015-05-07 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dsd.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dsd.h index dc7a28b1..98222a5f 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dsd.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_dsd.h @@ -1,12 +1,12 @@ /** * @file xmc_dsd.h - * @date 2015-10-27 + * @date 2015-09-18 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ebu.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ebu.h index a16aded2..280ef89f 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ebu.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ebu.h @@ -1,12 +1,12 @@ /** * @file xmc_ebu.h - * @date 2015-10-27 + * @date 2016-03-30 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -38,7 +38,10 @@ * * 2015-06-20: * - Initial - * - Description of changes 2 + * + * 2016-03-30: + * - Added ebu_data_hold_cycles_for_read_accesses to XMC_EBU_BUS_READ_CONFIG_t + * - Added ebu_device_addressing_mode and ebu_data_hold_cycles_for_write_accesses to XMC_EBU_BUS_WRITE_CONFIG_t * * @endcond * @@ -625,7 +628,10 @@ typedef struct XMC_EBU_BUS_READ_CONFIG * 11111B: 31 wait states
*/ uint32_t ebu_programmed_wait_states_for_read_accesses : 5; - uint32_t : 4; + /** + * + */ + uint32_t ebu_data_hold_cycles_for_read_accesses: 4; /** * Frequency of external clock at pin BFCLKO */ @@ -688,7 +694,7 @@ typedef struct XMC_EBU_BUS_WRITE_CONFIG uint32_t : 1; uint32_t ebu_wait_signal_polarity : 1; /**< Reversed polarity at WAIT */ uint32_t ebu_byte_control : 2; /**< Byte control signal control */ - uint32_t : 2; + uint32_t ebu_device_addressing_mode : 2; /**< Device addressing mode */ uint32_t ebu_wait_control : 2; /**< External wait control */ uint32_t ebu_asynchronous_address_phase : 1; /**< Asynchronous address phase */ uint32_t ebu_lock_chip_select : 1; /**< Lock chip select */ @@ -731,7 +737,11 @@ typedef struct XMC_EBU_BUS_WRITE_CONFIG * 11111B: 31 wait states
*/ uint32_t ebu_programmed_wait_states_for_write_accesses : 5; - uint32_t : 4; + + /** + * + */ + uint32_t ebu_data_hold_cycles_for_write_accesses : 4; /**< * Frequency of external clock at pin BFCLKO */ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ecat.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ecat.h new file mode 100644 index 00000000..4c4a6e87 --- /dev/null +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ecat.h @@ -0,0 +1,462 @@ + +/** + * @file xmc_ecat.h + * @date 2015-12-27 + * + * @cond + ********************************************************************************************************************* + * XMClib v2.1.8 - XMC Peripheral Driver Library + * + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with + * Infineon Technologies AG dave@infineon.com). + ********************************************************************************************************************* + * + * Change History + * -------------- + * + * 2015-12-27: + * - Initial Version
+ * + * @endcond + */ + +/** + * @addtogroup XMClib XMC Peripheral Library + * @{ + */ + +/** + * @addtogroup ECAT + * @brief EtherCAT Low level driver for XMC4800/XMC4300 series. + * + * EtherCAT is an Ethernet-based fieldbus system. + * The EtherCAT Slave Controller (ECAT) read the data addressed to them while the telegram passes through the device. + * An EtherCAT Slave Controller (ESC) takes care of the EtherCAT communication as an interface between the EtherCAT + * fieldbus and the slave application. EtherCAT uses standard IEEE 802.3 Ethernet frames, thus a standard network + * controller can be used and no special hardware is required on master side. EtherCAT has a reserved EtherType of + * 0x88A4 that distinguishes it from other Ethernet frames. Thus, EtherCAT can run in parallel to other Ethernet + * protocols. EtherCAT does not require the IP protocol, however it can be encapsulated in IP/UDP. The EtherCAT + * Slave Controller processes the frame in hardware. Thus, communication performance is independent from processor + * power. + * + * The XMC_ECAT low level driver provides functions to configure and initialize the ECAT hardware peripheral. + * For EHTERCAT stack integration, the necessary hardware accees layer APIs shall be explicitly implemented depending + * upon the stack provider. The XMC_ECAT lld layer provides only the hardware initialization functions for start up and + * basic functionalities. + * @{ + */ + +#ifndef XMC_ECAT_H +#define XMC_ECAT_H + +/********************************************************************************************************************** + * HEADER FILES + *********************************************************************************************************************/ + +#include "xmc_common.h" + +#if defined (ECAT0) + +#include "xmc_ecat_map.h" + +/********************************************************************************************************************** + * MACROS + *********************************************************************************************************************/ + +/********************************************************************************************************************** + * ENUMS + *********************************************************************************************************************/ + +/** + * ECAT status return values + */ +typedef enum XMC_ECAT_STATUS +{ + XMC_ECAT_STATUS_OK = 0U, /**< Driver accepted application request */ + XMC_ECAT_STATUS_BUSY = 1U, /**< Driver is busy and cannot handle request */ + XMC_ECAT_STATUS_ERROR = 2U /**< Driver could not fulfil application request */ +} XMC_ECAT_STATUS_t; + +/** + * EtherCAT event enumeration types + */ +typedef enum XMC_ECAT_EVENT +{ + XMC_ECAT_EVENT_AL_CONTROL = ECAT_AL_EVENT_MASK_AL_CE_MASK_Msk, /**< Application control event mask */ + XMC_ECAT_EVENT_DC_LATCH = ECAT_AL_EVENT_MASK_DC_LE_MASK_Msk, /**< Distributed Clock latch event mask */ + XMC_ECAT_EVENT_DC_SYNC0 = ECAT_AL_EVENT_MASK_ST_S0_MASK_Msk, /**< State of distributed clock sync-0 event mask */ + XMC_ECAT_EVENT_DC_SYNC1 = ECAT_AL_EVENT_MASK_ST_S1_MASK_Msk, /**< State of distributed clock sync-1 event mask */ + XMC_ECAT_EVENT_SM_ACTIVATION_REGISTER = ECAT_AL_EVENT_MASK_SM_A_MASK_Msk, /**< SyncManager activation register mask*/ + XMC_ECAT_EVENT_EEPROM = ECAT_AL_EVENT_MASK_EEP_E_MASK_Msk, /**< EEPROM Emulation event mask*/ + XMC_ECAT_EVENT_WATCHDOG = ECAT_AL_EVENT_MASK_WP_D_MASK_Msk, /**< WATCHDOG process data event mask*/ + XMC_ECAT_EVENT_SM0 = ECAT_AL_EVENT_MASK_SMI_0_MASK_Msk, /**< Sync Manager 0 event mask*/ + XMC_ECAT_EVENT_SM1 = ECAT_AL_EVENT_MASK_SMI_1_MASK_Msk, /**< Sync Manager 1 event mask*/ + XMC_ECAT_EVENT_SM2 = ECAT_AL_EVENT_MASK_SMI_2_MASK_Msk, /**< Sync Manager 2 event mask*/ + XMC_ECAT_EVENT_SM3 = ECAT_AL_EVENT_MASK_SMI_3_MASK_Msk, /**< Sync Manager 3 event mask*/ + XMC_ECAT_EVENT_SM4 = ECAT_AL_EVENT_MASK_SMI_4_MASK_Msk, /**< Sync Manager 4 event mask*/ + XMC_ECAT_EVENT_SM5 = ECAT_AL_EVENT_MASK_SMI_5_MASK_Msk, /**< Sync Manager 5 event mask*/ + XMC_ECAT_EVENT_SM6 = ECAT_AL_EVENT_MASK_SMI_6_MASK_Msk, /**< Sync Manager 6 event mask*/ + XMC_ECAT_EVENT_SM7 = ECAT_AL_EVENT_MASK_SMI_7_MASK_Msk /**< Sync Manager 7 event mask*/ +} XMC_ECAT_EVENT_t; + +/********************************************************************************************************************** + * DATA STRUCTURES + *********************************************************************************************************************/ + +/* Anonymous structure/union guard start */ +#if defined (__CC_ARM) +#pragma push +#pragma anon_unions +#elif defined (__TASKING__) +#pragma warning 586 +#endif + +/** + * ECAT port control data structure + */ +typedef struct XMC_ECAT_PORT_CTRL +{ + union + { + struct + { + uint32_t enable_rstreq: 1; /**< Master can trigger a reset of the XMC4700 / XMC4800 (::bool) */ + uint32_t: 7; /**< Reserved bits */ + uint32_t latch_input0: 2; /**< Latch input 0 selection (::XMC_ECAT_PORT_LATCHIN0_t) */ + uint32_t: 2; /**< Reserved bits */ + uint32_t latch_input1: 2; /**< Latch input 1 selection (::XMC_ECAT_PORT_LATCHIN1_t) */ + uint32_t: 2; /**< Reserved bits */ + uint32_t phyaddr_offset: 5; /**< Ethernet PHY address offset, address of port 0 */ + uint32_t: 1; /**< Reserved bits */ + uint32_t mdio: 2; /**< Bidirectional, push-pull management data I/O line (::XMC_ETH_MAC_PORT_CTRL_MDIO_t) */ + uint32_t: 8; /**< Reserved bits */ + }; + + uint32_t raw; + } common; + + union + { + struct + { + uint32_t rxd0: 2; /**< Receive data bit 0 (::XMC_ECAT_PORT0_CTRL_RXD0_t) */ + uint32_t rxd1: 2; /**< Receive data bit 1 (::XMC_ECAT_PORT0_CTRL_RXD1_t) */ + uint32_t rxd2: 2; /**< Receive data bit 2 (::XMC_ECAT_PORT0_CTRL_RXD2_t) */ + uint32_t rxd3: 2; /**< Receive data bit 3 (::XMC_ECAT_PORT0_CTRL_RXD3_t) */ + uint32_t rx_err: 2; /**< RX Error (::XMC_ECAT_PORT0_CTRL_RX_ERR_t) */ + uint32_t rx_dv: 2; /**< RX Data valid (::XMC_ECAT_PORT0_CTRL_RX_DV_t) */ + uint32_t rx_clk: 2; /**< RX Clock (::XMC_ECAT_PORT0_CTRL_RX_CLK_t) */ + uint32_t: 2; /**< Reserved bits */ + uint32_t link: 2; /**< Link status (::XMC_ECAT_PORT0_CTRL_LINK_t) */ + uint32_t: 10; /**< Reserved bits */ + uint32_t tx_clk: 2; /**< TX Clock (::XMC_ECAT_PORT0_CTRL_TX_CLK_t) */ + uint32_t tx_shift: 2; /**< TX signal delay (::XMC_ECAT_PORT0_CTRL_TX_SHIFT_t) */ + }; + + uint32_t raw; + } port0; + + union + { + struct + { + uint32_t rxd0: 2; /**< Receive data bit 0 (::XMC_ECAT_PORT_CTRL_RXD0_t) */ + uint32_t rxd1: 2; /**< Receive data bit 1 (::XMC_ECAT_PORT_CTRL_RXD1_t) */ + uint32_t rxd2: 2; /**< Receive data bit 2 (::XMC_ECAT_PORT_CTRL_RXD2_t) */ + uint32_t rxd3: 2; /**< Receive data bit 3 (::XMC_ECAT_PORT_CTRL_RXD3_t) */ + uint32_t rx_err: 2; /**< RX Error (::XMC_ECAT_PORT_CTRL_RX_ERR_t) */ + uint32_t rx_dv: 2; /**< RX Data valid (::XMC_ECAT_PORT_CTRL_RX_DV_t) */ + uint32_t rx_clk: 2; /**< RX Clock (::XMC_ECAT_PORT_CTRL_RX_CLK_t) */ + uint32_t: 2; /**< Reserved bits */ + uint32_t link: 2; /**< Link status (::XMC_ECAT_PORT_CTRL_LINK_t) */ + uint32_t: 10; /**< Reserved bits */ + uint32_t tx_clk: 2; /**< TX Clock (::XMC_ECAT_PORT_CTRL_TX_CLK_t) */ + uint32_t tx_shift: 2; /**< TX signal delay (::XMC_ECAT_PORT1_CTRL_TX_SHIFT_t) */ + }; + + uint32_t raw; + } port1; + +} XMC_ECAT_PORT_CTRL_t; + +/** + * ECAT EEPROM configuration area data structure + */ +typedef union XMC_ECAT_CONFIG +{ + struct + { + uint32_t : 8; + + uint32_t : 2; + uint32_t enable_dc_sync_out : 1; + uint32_t enable_dc_latch_in : 1; + uint32_t enable_enhanced_link_p0 : 1; + uint32_t enable_enhanced_link_p1 : 1; + uint32_t : 2; + + uint32_t : 16; + + uint16_t sync_pulse_length; /**< Initialization value for Pulse Length of SYNC Signals register*/ + + uint32_t : 16; + + uint16_t station_alias; /**< Initialization value for Configured Station Alias Address register */ + + uint16_t : 16; + + uint16_t : 16; + + uint16_t checksum; + }; + + uint32_t dword[4]; /**< Four 32 bit double word equivalent to 8 16 bit configuration area word. */ +} XMC_ECAT_CONFIG_t; + +/* Anonymous structure/union guard end */ +#if defined (__CC_ARM) +#pragma pop +#elif defined (__TASKING__) +#pragma warning restore +#endif + +/********************************************************************************************************************** + * API PROTOTYPES + *********************************************************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @param config XMC_ECAT_CONFIG_t + * @return XMC_ECAT_STATUS_t ECAT Initialization status + * + * \parDescription:
+ * Initialize the Ethernet MAC peripheral
+ * + * \par + * The function sets the link speed, applies the duplex mode, sets auto-negotiation + * and loop-back settings. + */ +void XMC_ECAT_Init(XMC_ECAT_CONFIG_t *const config); + +/** + * @param None + * @return None + * + * \parDescription:
+ * Enable the EtherCAT peripheral
+ * + * \par + * The function de-asserts the peripheral reset. + */ +void XMC_ECAT_Enable(void); + +/** + * @param None + * @return None + * + * \parDescription:
+ * Disable the EtherCAT peripheral
+ * + * \par + * The function asserts the peripheral reset. + */ +void XMC_ECAT_Disable(void); + +/** + * @param phy_addr PHY address + * @param reg_addr Register address + * @param data The destination to which the read data needs to be copied to. + * + * @return XMC_ECAT_STATUS_t EtherCAT Read PHY API return status + * + * \parDescription:
+ * Read a PHY register
+ * + * \par + * The function reads a PHY register. It essentially polls busy bit during max + * PHY_TIMEOUT time and reads the information into 'data' when not busy. + */ +XMC_ECAT_STATUS_t XMC_ECAT_ReadPhy(uint8_t phy_addr, uint8_t reg_addr, uint16_t *data); + +/** + * @param phy_addr PHY address + * @param reg_addr Register address + * @param data The data to write + * @return XMC_ECAT_STATUS_t EtherCAT Write PHY API return status + * + * \parDescription:
+ * Write a PHY register
+ * + * \par + * The function reads a PHY register. It essentially writes the data and polls + * the busy bit until it is no longer busy. + */ +XMC_ECAT_STATUS_t XMC_ECAT_WritePhy(uint8_t phy_addr, uint8_t reg_addr, uint16_t data); + +/** + * @param port_ctrl Port control configuration + * @return None + * + * \parDescription:
+ * Set port control configuration
+ * + * \par + * The function sets the port control by writing the configuration into the ECAT CON register. + * + */ +__STATIC_INLINE void XMC_ECAT_SetPortControl(const XMC_ECAT_PORT_CTRL_t port_ctrl) +{ + ECAT0_CON->CON = (uint32_t)port_ctrl.common.raw; + ECAT0_CON->CONP0 = (uint32_t)port_ctrl.port0.raw; + ECAT0_CON->CONP1 = (uint32_t)port_ctrl.port1.raw; +} + +/** + * @param event Single or logically OR'd events specified in the enum type @refXMC_ECAT_EVENT_t + * @return None + * + * \parDescription:
+ * Enable ECAT event(s)
+ * + * \par + * The function can be used to enable ECAT event(s). + */ +void XMC_ECAT_EnableEvent(uint32_t event); + +/** + * @param event Single or logically OR'd events specified in the enum type @refXMC_ECAT_EVENT_t + * @return None + * + * \parDescription:
+ * Disable an ECAT event(s)
+ * + * \par + * The function can be used to disable ECAT event(s). + */ +void XMC_ECAT_DisableEvent(uint32_t event); + +/** + * @param None + * @return uint32_t Event status + * + * \parDescription:
+ * Get event status
+ * + * \par + * The function returns the ECAT status and interrupt status as a single word. The user + * can then check the status of the events by using an appropriate mask. + */ +uint32_t XMC_ECAT_GetEventStatus(void); + + +/** + * @param channel SyncManager channel number. + * @return None + * + * \parDescription:
+ * Disables selected SyncManager channel
+ * + * \par + * Sets bit 0 of the corresponding 0x807 register. + */ +void XMC_ECAT_DisableSyncManChannel(const uint8_t channel); + +/** + * @param channel SyncManager channel number. + * @return None + * + * \parDescription:
+ * Enables selected SyncManager channel
+ * + * \par + * Resets bit 0 of the corresponding 0x807 register. + */ +void XMC_ECAT_EnableSyncManChannel(const uint8_t channel); + +/** + * @param None + * @return uint16_t Content of register 0x220-0x221 + * + * \parDescription:
+ * Get content of AL event register
+ * + * \par + * Get the first two bytes of the AL Event register (0x220-0x221). + */ +__STATIC_INLINE uint16_t XMC_ECAT_GetALEventRegister(void) +{ + return ((uint16_t)ECAT0->AL_EVENT_REQ); +} + +/** + * @param None + * @return uint16_t Content of register 0x220-0x221 + * + * \parDescription:
+ * Get content of AL event register
+ * + * \par + * Get the first two bytes of the AL Event register (0x220-0x221). + */ +__STATIC_INLINE uint16_t XMC_ECAT_GetALEventMask(void) +{ + return ((uint16_t)ECAT0->AL_EVENT_MASK); +} + +/** + * @param intMask Interrupt mask (disabled interrupt shall be zero) + * @return None + * + * \parDescription:
+ * Sets application event mask register
+ * + * \par + * Performs a logical OR with the AL Event Mask register (0x0204 : 0x0205). + */ +__STATIC_INLINE void XMC_ECAT_SetALEventMask(uint16_t intMask) +{ + ECAT0->AL_EVENT_MASK |= (uint32_t)(intMask); +} + + +#ifdef __cplusplus +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined (ECAT) */ + +#endif /* XMC_ECAT_H */ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ecat_map.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ecat_map.h new file mode 100644 index 00000000..2df504dc --- /dev/null +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ecat_map.h @@ -0,0 +1,287 @@ +/** + * @file xmc_ecat_map.h + * @date 2016-07-20 + * + * @cond + ********************************************************************************************************************* + * XMClib v2.1.8 - XMC Peripheral Driver Library + * + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with + * Infineon Technologies AG dave@infineon.com). + ********************************************************************************************************************* + * + * Change History + * -------------- + * + * 2015-09-09: + * - Initial + * + * 2015-07-20: + * - Added XMC_ECAT_PORT_CTRL_LATCHIN0_P9_0 and XMC_ECAT_PORT_CTRL_LATCHIN0_P9_1 + * + * @endcond + */ + +#ifndef XMC_ECAT_MAP_H +#define XMC_ECAT_MAP_H + +/** + * ECAT PORT 0 receive data 0 line + */ +typedef enum XMC_ECAT_PORT0_CTRL_RXD0 +{ + XMC_ECAT_PORT0_CTRL_RXD0_P1_4 = 0U, /**< RXD0A receive data line */ + XMC_ECAT_PORT0_CTRL_RXD0_P5_0 = 1U, /**< RXD0B receive data line */ + XMC_ECAT_PORT0_CTRL_RXD0_P7_4 = 2U, /**< RXD0C receive data line */ +} XMC_ECAT_PORT0_CTRL_RXD0_t; + +/** + * ECAT PORT 0 receive data 1 line + */ +typedef enum XMC_ECAT_PORT0_CTRL_RXD1 +{ + XMC_ECAT_PORT0_CTRL_RXD1_P1_5 = 0U, /**< RXD1A receive data line */ + XMC_ECAT_PORT0_CTRL_RXD1_P5_1 = 1U, /**< RXD1B receive data line */ + XMC_ECAT_PORT0_CTRL_RXD1_P7_5 = 2U, /**< RXD1C receive data line */ +} XMC_ECAT_PORT0_CTRL_RXD1_t; + +/** + * ECAT PORT 0 receive data 2 line + */ +typedef enum XMC_ECAT_PORT0_CTRL_RXD2 +{ + XMC_ECAT_PORT0_CTRL_RXD2_P1_10 = 0U, /**< RXD2A receive data line */ + XMC_ECAT_PORT0_CTRL_RXD2_P5_2 = 1U, /**< RXD2B receive data line */ + XMC_ECAT_PORT0_CTRL_RXD2_P7_6 = 2U /**< RXD2C receive data line */ +} XMC_ECAT_PORT0_CTRL_RXD2_t; + +/** + * ECAT PORT 0 receive data 3 line + */ +typedef enum XMC_ECAT_PORT0_CTRL_RXD3 +{ + XMC_ECAT_PORT0_CTRL_RXD3_P1_11 = 0U, /**< RXD3A Receive data line */ + XMC_ECAT_PORT0_CTRL_RXD3_P5_7 = 1U, /**< RXD3B Receive data line */ + XMC_ECAT_PORT0_CTRL_RXD3_P7_7 = 2U /**< RXD3C Receive data line */ +} XMC_ECAT_PORT0_CTRL_RXD3_t; + +/** + * ECAT PORT 0 receive error line + */ +typedef enum XMC_ECAT_PORT0_CTRL_RX_ERR +{ + XMC_ECAT_PORT0_CTRL_RX_ERR_P4_0 = 0U, /**< RX_ERRA Receive error line */ + XMC_ECAT_PORT0_CTRL_RX_ERR_P2_6 = 1U, /**< RX_ERRB Receive error line */ + XMC_ECAT_PORT0_CTRL_RX_ERR_P7_9 = 2U /**< RX_ERRC Receive error line */ +} XMC_ECAT_PORT0_CTRL_RX_ERR_t; + +/** + * ECAT PORT 0 receive clock line + */ +typedef enum XMC_ECAT_PORT0_CTRL_RX_CLK +{ + XMC_ECAT_PORT0_CTRL_RX_CLK_P1_1 = 0U, /**< RX_CLKA Recevive clock */ + XMC_ECAT_PORT0_CTRL_RX_CLK_P5_4 = 1U, /**< RX_CLKB Recevive clock */ + XMC_ECAT_PORT0_CTRL_RX_CLK_P7_10 = 2U, /**< RX_CLKC Recevive clock */ +} XMC_ECAT_PORT0_CTRL_RX_CLK_t; + +/** + * ECAT PORT 0 data valid + */ +typedef enum XMC_ECAT_PORT0_CTRL_RX_DV +{ + XMC_ECAT_PORT0_CTRL_RX_DV_P1_9 = 0U, /**< RX_DVA Receive data valid */ + XMC_ECAT_PORT0_CTRL_RX_DV_P5_6 = 1U, /**< RX_DVB Receive data valid */ + XMC_ECAT_PORT0_CTRL_RX_DV_P7_11 = 2U, /**< RX_DVC Receive data valid */ +} XMC_ECAT_PORT0_CTRL_RX_DV_t; + +/** + * ECAT PORT 0 link status + */ +typedef enum XMC_ECAT_PORT0_CTRL_LINK +{ + XMC_ECAT_PORT0_CTRL_LINK_P4_1 = 0U, /**< LINKA Link status */ + XMC_ECAT_PORT0_CTRL_LINK_P1_15 = 1U, /**< LINKB Link status */ + XMC_ECAT_PORT0_CTRL_LINK_P9_10 = 2U, /**< LINKC Link status */ +} XMC_ECAT_PORT0_CTRL_LINK_t; + +/** + * ECAT PORT 0 transmit clock + */ +typedef enum XMC_ECAT_PORT0_CTRL_TX_CLK +{ + XMC_ECAT_PORT0_CTRL_TX_CLK_P1_0 = 0U, /**< TX_CLKA transmit clock */ + XMC_ECAT_PORT0_CTRL_TX_CLK_P5_5 = 1U, /**< TX_CLKB transmit clock */ + XMC_ECAT_PORT0_CTRL_TX_CLK_P9_1 = 2U, /**< TX_CLKC transmit clock */ +} XMC_ECAT_PORT0_CTRL_TX_CLK_t; + +/** + * ECAT PORT 1 receive data 0 line + */ +typedef enum XMC_ECAT_PORT1_CTRL_RXD0 +{ + XMC_ECAT_PORT1_CTRL_RXD0_P0_11 = 0U, /**< RXD0A receive data line */ + XMC_ECAT_PORT1_CTRL_RXD0_P14_7 = 1U, /**< RXD0B receive data line */ + XMC_ECAT_PORT1_CTRL_RXD0_P8_4 = 2U, /**< RXD0C receive data line */ +} XMC_ECAT_PORT1_CTRL_RXD0_t; + +/** + * ECAT PORT 1 receive data 1 line + */ +typedef enum XMC_ECAT_PORT1_CTRL_RXD1 +{ + XMC_ECAT_PORT1_CTRL_RXD1_P0_6 = 0U, /**< RXD1A receive data line */ + XMC_ECAT_PORT1_CTRL_RXD1_P14_12 = 1U, /**< RXD1B receive data line */ + XMC_ECAT_PORT1_CTRL_RXD1_P8_5 = 2U, /**< RXD1C receive data line */ +} XMC_ECAT_PORT1_CTRL_RXD1_t; + +/** + * ECAT PORT 1 receive data 2 line + */ +typedef enum XMC_ECAT_PORT1_CTRL_RXD2 +{ + XMC_ECAT_PORT1_CTRL_RXD2_P0_5 = 0U, /**< RXD2A receive data line */ + XMC_ECAT_PORT1_CTRL_RXD2_P14_13 = 1U, /**< RXD2B receive data line */ + XMC_ECAT_PORT1_CTRL_RXD2_P8_6 = 2U /**< RXD2C receive data line */ +} XMC_ECAT_PORT1_CTRL_RXD2_t; + +/** + * ECAT PORT 1 receive data 3 line + */ +typedef enum XMC_ECAT_PORT1_CTRL_RXD3 +{ + XMC_ECAT_PORT1_CTRL_RXD3_P0_4 = 0U, /**< RXD3A Receive data line */ + XMC_ECAT_PORT1_CTRL_RXD3_P14_14 = 1U, /**< RXD3B Receive data line */ + XMC_ECAT_PORT1_CTRL_RXD3_P8_7 = 2U /**< RXD3C Receive data line */ +} XMC_ECAT_PORT1_CTRL_RXD3_t; + +/** + * ECAT PORT 1 receive error line + */ +typedef enum XMC_ECAT_PORT1_CTRL_RX_ERR +{ + XMC_ECAT_PORT1_CTRL_RX_ERR_P3_5 = 0U, /**< RX_ERRA Receive error line */ + XMC_ECAT_PORT1_CTRL_RX_ERR_P15_2 = 1U, /**< RX_ERRB Receive error line */ + XMC_ECAT_PORT1_CTRL_RX_ERR_P8_9 = 2U /**< RX_ERRC Receive error line */ +} XMC_ECAT_PORT1_CTRL_RX_ERR_t; + +/** + * ECAT PORT 1 receive clock line + */ +typedef enum XMC_ECAT_PORT1_CTRL_RX_CLK +{ + XMC_ECAT_PORT1_CTRL_RX_CLK_P0_1 = 0U, /**< RX_CLKA Recevive clock */ + XMC_ECAT_PORT1_CTRL_RX_CLK_P14_6 = 1U, /**< RX_CLKB Recevive clock */ + XMC_ECAT_PORT1_CTRL_RX_CLK_P8_10 = 2U, /**< RX_CLKC Recevive clock */ +} XMC_ECAT_PORT1_CTRL_RX_CLK_t; + +/** + * ECAT PORT 1 data valid + */ +typedef enum XMC_ECAT_PORT1_CTRL_RX_DV +{ + XMC_ECAT_PORT1_CTRL_RX_DV_P0_9 = 0U, /**< RX_DVA Receive data valid */ + XMC_ECAT_PORT1_CTRL_RX_DV_P14_15 = 1U, /**< RX_DVB Receive data valid */ + XMC_ECAT_PORT1_CTRL_RX_DV_P8_11 = 2U, /**< RX_DVC Receive data valid */ +} XMC_ECAT_PORT1_CTRL_RX_DV_t; + +/** + * ECAT PORT 0 link status + */ +typedef enum XMC_ECAT_PORT1_CTRL_LINK +{ + XMC_ECAT_PORT1_CTRL_LINK_P3_4 = 0U, /**< LINKA Link status */ + XMC_ECAT_PORT1_CTRL_LINK_P15_3 = 1U, /**< LINKB Link status */ + XMC_ECAT_PORT1_CTRL_LINK_P9_11 = 2U, /**< LINKC Link status */ +} XMC_ECAT_PORT1_CTRL_LINK_t; + +/** + * ECAT PORT 1 transmit clock + */ +typedef enum XMC_ECAT_PORT1_CTRL_TX_CLK +{ + XMC_ECAT_PORT1_CTRL_TX_CLK_P0_10 = 0U, /**< TX_CLKA transmit clock */ + XMC_ECAT_PORT1_CTRL_TX_CLK_P5_9 = 1U, /**< TX_CLKB transmit clock */ + XMC_ECAT_PORT1_CTRL_TX_CLK_P9_0 = 2U, /**< TX_CLKC transmit clock */ +} XMC_ECAT_PORT1_CTRL_TX_CLK_t; + +/** + * ECAT management data I/O + */ +typedef enum XMC_ECAT_PORT_CTRL_MDIO +{ + XMC_ECAT_PORT_CTRL_MDIO_P0_12 = 0U, /**< MDIOA management data I/O */ + XMC_ECAT_PORT_CTRL_MDIO_P4_2 = 1U, /**< MDIOB management data I/O */ + XMC_ECAT_PORT_CTRL_MDIO_P9_7 = 2U /**< MDIOC management data I/O */ +} XMC_ECAT_PORT_CTRL_MDIO_t; + +/** + * ECAT latch 0 + */ +typedef enum XMC_ECAT_PORT_CTRL_LATCHIN0 +{ + XMC_ECAT_PORT_CTRL_LATCHIN0_P14_5 = 0U, /**< LATCH0A line */ + XMC_ECAT_PORT_CTRL_LATCHIN0_9_0 = 1U, /**< LATCH0B line @deprecated Please use instead XMC_ECAT_PORT_CTRL_LATCHIN0_P9_0 */ + XMC_ECAT_PORT_CTRL_LATCHIN0_P9_0 = 1U, /**< LATCH0B line */ + XMC_ECAT_PORT_CTRL_LATCHIN0_ERU0_PDOUT0 = 2U, /**< LATCH0C line */ + XMC_ECAT_PORT_CTRL_LATCHIN0_ERU1_PDOUT0 = 3U, /**< LATCH0D line */ +} XMC_ECAT_PORT_CTRL_LATCHIN0_t; + +/** + * ECAT latch 1 + */ +typedef enum XMC_ECAT_PORT_CTRL_LATCHIN1 +{ + XMC_ECAT_PORT_CTRL_LATCHIN1_P14_4 = 0U, /**< LATCH1 A line */ + XMC_ECAT_PORT_CTRL_LATCHIN1_9_1 = 1U, /**< LATCH1 B line @deprecated Please use instead XMC_ECAT_PORT_CTRL_LATCHIN1_P9_1 */ + XMC_ECAT_PORT_CTRL_LATCHIN1_P9_1 = 1U, /**< LATCH1 B line */ + XMC_ECAT_PORT_CTRL_LATCHIN1_ERU0_PDOUT1 = 2U, /**< LATCH1C line */ + XMC_ECAT_PORT_CTRL_LATCHIN1_ERU1_PDOUT1 = 3U, /**< LATCH1D line */ +} XMC_ECAT_PORT_CTRL_LATCHIN1_t; + +/** + * ECAT Port 0 Manual TX Shift configuration + */ +typedef enum XMC_ECAT_PORT0_CTRL_TX_SHIFT +{ + XMC_ECAT_PORT0_CTRL_TX_SHIFT_0NS = 0U, /**< ECAT Port 0 Manual TX Shift compensation 0 nanoseconds */ + XMC_ECAT_PORT0_CTRL_TX_SHIFT_10NS = 1U, /**< ECAT Port 0 Manual TX Shift compensation 10 nanoseconds */ + XMC_ECAT_PORT0_CTRL_TX_SHIFT_20NS = 2U, /**< ECAT Port 0 Manual TX Shift compensation 20 nanoseconds */ + XMC_ECAT_PORT0_CTRL_TX_SHIFT_30NS = 3U /**< ECAT Port 0 Manual TX Shift compensation 30 nanoseconds */ +} XMC_ECAT_PORT0_CTRL_TX_SHIFT_t; + +/** + * ECAT Port 1 Manual TX Shift configuration + */ +typedef enum XMC_ECAT_PORT1_CTRL_TX_SHIFT +{ + XMC_ECAT_PORT1_CTRL_TX_SHIFT_0NS = 0U, /**< ECAT Port 0 Manual TX Shift compensation 0 nanoseconds */ + XMC_ECAT_PORT1_CTRL_TX_SHIFT_10NS = 1U, /**< ECAT Port 0 Manual TX Shift compensation 10 nanoseconds */ + XMC_ECAT_PORT1_CTRL_TX_SHIFT_20NS = 2U, /**< ECAT Port 0 Manual TX Shift compensation 20 nanoseconds */ + XMC_ECAT_PORT1_CTRL_TX_SHIFT_30NS = 3U /**< ECAT Port 0 Manual TX Shift compensation 30 nanoseconds */ +} XMC_ECAT_PORT1_CTRL_TX_SHIFT_t; + +#endif diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eru.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eru.h index 851dc97a..3eb06c2c 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eru.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eru.h @@ -1,12 +1,12 @@ /** * @file xmc_eru.h - * @date 2015-10-27 + * @date 2016-03-10 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -46,6 +46,9 @@ * 2015-10-07: * - Doc update for XMC_ERU_ETL_CONFIG_t field
* + * 2016-03-10: + * - XMC_ERU_ETL_GetEdgeDetection() API is added to get the configured edge for event generation.
+ * * @endcond */ @@ -564,6 +567,20 @@ void XMC_ERU_ETL_SetEdgeDetection(XMC_ERU_t *const eru, const uint8_t channel, const XMC_ERU_ETL_EDGE_DETECTION_t edge_detection); +/** + * @param eru A constant pointer to XMC_ERU_t, pointing to the ERU base address. + * @param channel ERU_ETLx(Event trigger logic unit) channel. + * Range : [0 to 3] + * + * @return XMC_ERU_ETL_EDGE_DETECTION_t indicate which egde/s is configured for event generation + * + * \parDescription:
+ * Return event trigger edge/s by reading (RE, FE) bits of EXICONx(x = [0 to 3]) register.
+ * \par + * Rising edge, falling edge or either edges can be selected to generate the event. + * Call this to get the configured trigger edge. */ +XMC_ERU_ETL_EDGE_DETECTION_t XMC_ERU_ETL_GetEdgeDetection(XMC_ERU_t *const eru, + const uint8_t channel); /** * @param eru A constant pointer to XMC_ERU_t, pointing to the ERU base address. * @param channel ERU_ETLx(Event trigger logic unit) channel. diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eth_mac.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eth_mac.h index 0f26d305..7e2f8b09 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eth_mac.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eth_mac.h @@ -1,13 +1,13 @@ /** * @file xmc_eth_mac.h - * @date 2015-10-27 + * @date 2016-06-08 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -38,8 +38,18 @@ * -------------- * * 2015-06-20: - * - Initial
+ * - Initial * + * 2016-04-25: + * - Change XMC_ETH_MAC_BUF_SIZE to 1524 to allow for Tagged MAC frame format + * + * 2016-05-19: + * - Added XMC_ETH_MAC_GetTxBuffer() and XMC_ETH_MAC_GetRxBuffer() + * - Added XMC_ETH_MAC_SetTxBufferSize() + * + * 2016-06-08: + * - Added XMC_ETH_MAC_IsRxDescriptorOwnedByDma() + * * @endcond */ @@ -80,10 +90,62 @@ * MACROS *********************************************************************************************************************/ -#define XMC_ETH_MAC_BUF_SIZE (1518) /**< ETH MAC buffer size */ +#define XMC_ETH_MAC_BUF_SIZE (1524) /**< ETH MAC buffer size */ #define XMC_ETH_MAC_PHY_MAX_RETRIES (0xffffUL) /**< Maximum retries */ #define XMC_ETH_WAKEUP_REGISTER_LENGTH (8U) /**< Remote wakeup frame reg length */ +/** + * TDES0 Descriptor TX Packet Control/Status + */ +#define ETH_MAC_DMA_TDES0_OWN (0x80000000U) /**< Own bit 1=DMA, 0=CPU */ +#define ETH_MAC_DMA_TDES0_IC (0x40000000U) /**< Interrupt on competition */ +#define ETH_MAC_DMA_TDES0_LS (0x20000000U) /**< Last segment */ +#define ETH_MAC_DMA_TDES0_FS (0x10000000U) /**< First segment */ +#define ETH_MAC_DMA_TDES0_DC (0x08000000U) /**< Disable CRC */ +#define ETH_MAC_DMA_TDES0_DP (0x04000000U) /**< Disable pad */ +#define ETH_MAC_DMA_TDES0_TTSE (0x02000000U) /**< Transmit time stamp enable */ +#define ETH_MAC_DMA_TDES0_CIC (0x00C00000U) /**< Checksum insertion control */ +#define ETH_MAC_DMA_TDES0_TER (0x00200000U) /**< Transmit end of ring */ +#define ETH_MAC_DMA_TDES0_TCH (0x00100000U) /**< Second address chained */ +#define ETH_MAC_DMA_TDES0_TTSS (0x00020000U) /**< Transmit time stamp status */ +#define ETH_MAC_DMA_TDES0_IHE (0x00010000U) /**< IP header error */ +#define ETH_MAC_DMA_TDES0_ES (0x00008000U) /**< Error summary */ +#define ETH_MAC_DMA_TDES0_JT (0x00004000U) /**< Jabber timeout */ +#define ETH_MAC_DMA_TDES0_FF (0x00002000U) /**< Frame flushed */ +#define ETH_MAC_DMA_TDES0_IPE (0x00001000U) /**< IP payload error */ +#define ETH_MAC_DMA_TDES0_LOC (0x00000800U) /**< Loss of carrier */ +#define ETH_MAC_DMA_TDES0_NC (0x00000400U) /**< No carrier */ +#define ETH_MAC_DMA_TDES0_LC (0x00000200U) /**< Late collision */ +#define ETH_MAC_DMA_TDES0_EC (0x00000100U) /**< Excessive collision */ +#define ETH_MAC_DMA_TDES0_VF (0x00000080U) /**< VLAN frame */ +#define ETH_MAC_DMA_TDES0_CC (0x00000078U) /**< Collision count */ +#define ETH_MAC_DMA_TDES0_ED (0x00000004U) /**< Excessive deferral */ +#define ETH_MAC_DMA_TDES0_UF (0x00000002U) /**< Underflow error */ +#define ETH_MAC_DMA_TDES0_DB (0x00000001U) /**< Deferred bit */ + +/** + * RDES0 Descriptor RX Packet Status + */ +#define ETH_MAC_DMA_RDES0_OWN (0x80000000U) /**< Own bit 1=DMA, 0=CPU */ +#define ETH_MAC_DMA_RDES0_AFM (0x40000000U) /**< Destination address filter fail */ +#define ETH_MAC_DMA_RDES0_FL (0x3FFF0000U) /**< Frame length mask */ +#define ETH_MAC_DMA_RDES0_ES (0x00008000U) /**< Error summary */ +#define ETH_MAC_DMA_RDES0_DE (0x00004000U) /**< Descriptor error */ +#define ETH_MAC_DMA_RDES0_SAF (0x00002000U) /**< Source address filter fail */ +#define ETH_MAC_DMA_RDES0_LE (0x00001000U) /**< Length error */ +#define ETH_MAC_DMA_RDES0_OE (0x00000800U) /**< Overflow error */ +#define ETH_MAC_DMA_RDES0_VLAN (0x00000400U) /**< VLAN tag */ +#define ETH_MAC_DMA_RDES0_FS (0x00000200U) /**< First descriptor */ +#define ETH_MAC_DMA_RDES0_LS (0x00000100U) /**< Last descriptor */ +#define ETH_MAC_DMA_RDES0_TSA (0x00000080U) /**< Timestamp available */ +#define ETH_MAC_DMA_RDES0_LC (0x00000040U) /**< Late collision */ +#define ETH_MAC_DMA_RDES0_FT (0x00000020U) /**< Frame type */ +#define ETH_MAC_DMA_RDES0_RWT (0x00000010U) /**< Receive watchdog timeout */ +#define ETH_MAC_DMA_RDES0_RE (0x00000008U) /**< Receive error */ +#define ETH_MAC_DMA_RDES0_DBE (0x00000004U) /**< Dribble bit error */ +#define ETH_MAC_DMA_RDES0_CE (0x00000002U) /**< CRC error */ +#define ETH_MAC_DMA_RDES0_ESA (0x00000001U) /**< Extended Status/Rx MAC address */ + /********************************************************************************************************************** * ENUMS *********************************************************************************************************************/ @@ -1132,6 +1194,21 @@ __STATIC_INLINE void XMC_ETH_MAC_SetLink(XMC_ETH_MAC_t *const eth_mac, */ void XMC_ETH_MAC_ReturnRxDescriptor(XMC_ETH_MAC_t *const eth_mac); +/** + * @param eth_mac A constant pointer to XMC_ETH_MAC_t, pointing to the ETH MAC base address + * @return bool true if RX descriptor is owned by DMA, false otherwise + * + * \parDescription:
+ * Is RX descriptor owned by DMA?
+ * + * \par + * The function checks if the RX descriptor is owned by the DMA. + */ +__STATIC_INLINE bool XMC_ETH_MAC_IsRxDescriptorOwnedByDma(XMC_ETH_MAC_t *const eth_mac) +{ + return ((eth_mac->rx_desc[eth_mac->rx_index].status & ETH_MAC_DMA_RDES0_OWN) != 0U); +} + /** * @param eth_mac A constant pointer to XMC_ETH_MAC_t, pointing to the ETH MAC base address * @return None @@ -1154,7 +1231,10 @@ void XMC_ETH_MAC_ReturnTxDescriptor(XMC_ETH_MAC_t *const eth_mac); * \par * The function checks if the TX descriptor is owned by the DMA. */ -bool XMC_ETH_MAC_IsTxDescriptorOwnedByDma(XMC_ETH_MAC_t *const eth_mac); +__STATIC_INLINE bool XMC_ETH_MAC_IsTxDescriptorOwnedByDma(XMC_ETH_MAC_t *const eth_mac) +{ + return ((eth_mac->tx_desc[eth_mac->tx_index].status & ETH_MAC_DMA_TDES0_OWN) != 0U); +} /** * @param eth_mac A constant pointer to XMC_ETH_MAC_t, pointing to the ETH MAC base address @@ -1286,6 +1366,43 @@ __STATIC_INLINE void XMC_ETH_MAC_ResumeRx(XMC_ETH_MAC_t *const eth_mac) eth_mac->regs->RECEIVE_POLL_DEMAND = 0U; } +/** + * @param eth_mac A constant pointer to XMC_ETH_MAC_t, pointing to the ETH MAC base address + * @return Pointer to current TX buffer + * + * \parDescription:
+ * Returns the current TX buffer. + */ +__STATIC_INLINE uint8_t *XMC_ETH_MAC_GetTxBuffer(XMC_ETH_MAC_t *const eth_mac) +{ + return (uint8_t *)(eth_mac->tx_desc[eth_mac->tx_index].buffer1); +} + +/** + * @param eth_mac A constant pointer to XMC_ETH_MAC_t, pointing to the ETH MAC base address + * @return Pointer to current RX buffer + * + * \parDescription:
+ * Returns the current RX buffer. + */ +__STATIC_INLINE uint8_t *XMC_ETH_MAC_GetRxBuffer(XMC_ETH_MAC_t *const eth_mac) +{ + return (uint8_t *)(eth_mac->rx_desc[eth_mac->rx_index].buffer1); +} + +/** + * @param eth_mac A constant pointer to XMC_ETH_MAC_t, pointing to the ETH MAC base address + * @param size Size of buffer + * @return None + * + * \parDescription:
+ * Sets the current TX buffer size. + */ +__STATIC_INLINE void XMC_ETH_MAC_SetTxBufferSize(XMC_ETH_MAC_t *const eth_mac, uint32_t size) +{ + eth_mac->tx_desc[eth_mac->tx_index].length = size; +} + /** * @param eth_mac A constant pointer to XMC_ETH_MAC_t, pointing to the ETH MAC base address * @param event A valid ETH PMT event (XMC_ETH_MAC_PMT_EVENT_t) or a valid combination diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eth_mac_map.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eth_mac_map.h index 56483727..84260ed1 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eth_mac_map.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eth_mac_map.h @@ -1,12 +1,12 @@ /** * @file xmc_eth_mac_map.h - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eth_phy.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eth_phy.h index 0c97e74f..3c6ae2a1 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eth_phy.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_eth_phy.h @@ -1,12 +1,12 @@ /** * @file xmc_eth_phy.h - * @date 2015-10-27 + * @date 2015-12-15 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -37,7 +37,10 @@ * -------------- * * 2015-06-20: - * - Initial
+ * - Initial + * + * 2015-12-15: + * - Added XMC_ETH_PHY_ExitPowerDown and XMC_ETH_PHY_Reset * * @endcond */ @@ -95,7 +98,7 @@ extern "C" { * @param eth_mac A constant pointer to XMC_ETH_MAC_t, pointing to the ETH MAC base address * @param phy_addr Physical address * @param config A constant pointer to XMC_ETH_PHY_CONFIG_t, pointing to a physical layer config - * @return int32_t ETH physical layer initialization status + * @return int32_t return status XMC_ETH_PHY_STATUS_t * * \parDescription:
* Initialize the ETH physical layer interface
@@ -109,17 +112,36 @@ int32_t XMC_ETH_PHY_Init(XMC_ETH_MAC_t *const eth_mac, uint8_t phy_addr, const X /** * @param eth_mac A constant pointer to XMC_ETH_MAC_t, pointing to the ETH MAC base address * @param phy_addr Physical address - * @return int32_t ETH MAC return status + * @return int32_t return status XMC_ETH_PHY_STATUS_t * * \parDescription:
- * Enable power down mode
+ * Enter power down mode
* - * \par - * Power-down mode is used to power down the KSZ8021/31RNL device (on the XMC4500 relax kit) - * when it is not in use after power-up. It is enabled by writing a 1 to register 0h, bit [11]. */ int32_t XMC_ETH_PHY_PowerDown(XMC_ETH_MAC_t *const eth_mac, uint8_t phy_addr); +/** + * @param eth_mac A constant pointer to XMC_ETH_MAC_t, pointing to the ETH MAC base address + * @param phy_addr Physical address + * @return int32_t return status XMC_ETH_PHY_STATUS_t + * + * \parDescription:
+ * Exit power down mode
+ * + */ +int32_t XMC_ETH_PHY_ExitPowerDown(XMC_ETH_MAC_t *const eth_mac, uint8_t phy_addr); + +/** + * @param eth_mac A constant pointer to XMC_ETH_MAC_t, pointing to the ETH MAC base address + * @param phy_addr Physical address + * @return int32_t return status XMC_ETH_PHY_STATUS_t + * + * \parDescription:
+ * Reset transciver
+ * + */ +int32_t XMC_ETH_PHY_Reset(XMC_ETH_MAC_t *const eth_mac, uint8_t phy_addr); + /** * @param eth_mac A constant pointer to XMC_ETH_MAC_t, pointing to the ETH MAC base address * @param phy_addr Physical address @@ -162,6 +184,16 @@ XMC_ETH_LINK_SPEED_t XMC_ETH_PHY_GetLinkSpeed(XMC_ETH_MAC_t *const eth_mac, uint */ XMC_ETH_LINK_DUPLEX_t XMC_ETH_PHY_GetLinkDuplex(XMC_ETH_MAC_t *const eth_mac, uint8_t phy_addr); +/** + * @param eth_mac A constant pointer to XMC_ETH_MAC_t, pointing to the ETH MAC base address + * @param phy_addr Physical address + * @return bool True if autonegotiation process is finished otherwise false + * + * \parDescription:
+ * Get status of autonegotiation
+ */ +bool XMC_ETH_PHY_IsAutonegotiationCompleted(XMC_ETH_MAC_t *const eth_mac, uint8_t phy_addr); + #ifdef __cplusplus } #endif diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_fce.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_fce.h index 1e7b4753..4f1f1049 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_fce.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_fce.h @@ -1,12 +1,12 @@ /** * @file xmc_fce.h - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_flash.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_flash.h index c72a837f..69b8d552 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_flash.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_flash.h @@ -1,12 +1,12 @@ /** * @file xmc_flash.h - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -191,7 +191,7 @@ void XMC_FLASH_DisableEvent(const uint32_t event_msk); * Programs a single flash page associated with the specified \a address.\n\n XMC1000 Flash can be programmed with one * page (256 bytes) using this API. It calls the Flash Firmware routine \a XMC1000_NvmProgVerify(unsigned long pageAddr) * to perform the programming. Refer XMC1000 reference manual of for more details on flash firmware routines - * (Section 25.3). Call XMC_FLASH_GetStatus() API after calling this API, to verify the erase operation. + * (Section 25.3). Call XMC_FLASH_GetStatus() API after calling this API, to verify the programming operation. * \endif * \if XMC4 * Programs a single flash page associated with the specified \a address.\n\n XMC4000 flash can be programmed with a @@ -199,7 +199,7 @@ void XMC_FLASH_DisableEvent(const uint32_t event_msk); * bits inside status register. It starts the write process by issuing the page mode command followed by the load page * command which loads the targeted \a data blocks into internal assembly buffer. Finally, it issues the write page * command which programs the \a data into flash. Call XMC_FLASH_GetStatus() API after calling this API, to verify the - * erase operation.\n + * programming operation.\n * \endif * * \parNote:
diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_gpio.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_gpio.h index 6d31e4f9..66667db1 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_gpio.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_gpio.h @@ -1,12 +1,12 @@ /** * @file xmc_gpio.h - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_hrpwm.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_hrpwm.h index 7881cbb1..8c30bd8f 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_hrpwm.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_hrpwm.h @@ -1,13 +1,13 @@ /** * @file xmc_hrpwm.h - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************** - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_hrpwm_map.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_hrpwm_map.h index 85d0efd2..04fa35d4 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_hrpwm_map.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_hrpwm_map.h @@ -1,13 +1,13 @@ /** * @file xmc_hrpwm_map.h - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************** - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_i2c.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_i2c.h index 7dad6a5e..31ac22b6 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_i2c.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_i2c.h @@ -1,12 +1,12 @@ /** * @file xmc_i2c.h - * @date 2015-10-27 + * @date 2016-05-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -64,6 +64,12 @@ * - Naming of APIs modified: from XMC_I2C_CH_EnableSlaveAcknowledgeTo00() to XMC_I2C_CH_EnableAcknowledgeAddress0() * and from XMC_I2C_CH_DisableSlaveAcknowledgeTo00() to XMC_I2C_CH_DisableAcknowledgeAddress0(). * + * 2016-05-20: + * - Added XMC_I2C_CH_EnableDataTransmission() and XMC_I2C_CH_DisableDataTransmission() + * + * 2016-08-17: + * - Improved documentation of slave address passing + * * @endcond * */ @@ -359,8 +365,8 @@ __STATIC_INLINE void XMC_I2C_CH_SetInterruptNodePointer(XMC_USIC_CH_t *const cha * @param channel Pointer to USIC channel handler of type @ref XMC_USIC_CH_t \n * \b Range: @ref XMC_I2C0_CH0, @ref XMC_I2C0_CH1,@ref XMC_I2C1_CH0,@ref XMC_I2C1_CH1,@ref XMC_I2C2_CH0,@ref XMC_I2C2_CH1 @note Availability of I2C1 and I2C2 depends on device selection * @param interrupt_node Interrupt node pointer to be configured. \n - * \b Range: @ref XMC_SPI_CH_INTERRUPT_NODE_POINTER_TRANSMIT_SHIFT, - * @ref XMC_SPI_CH_INTERRUPT_NODE_POINTER_TRANSMIT_BUFFER etc. + * \b Range: @ref XMC_I2C_CH_INTERRUPT_NODE_POINTER_TRANSMIT_SHIFT, + * @ref XMC_I2C_CH_INTERRUPT_NODE_POINTER_TRANSMIT_BUFFER etc. * @param service_request Service request number.\n * \b Range: 0 to 5. * @return None @@ -434,7 +440,10 @@ __STATIC_INLINE void XMC_I2C_CH_SetInputSource(XMC_USIC_CH_t *const channel, con * * \par * Address is set in PCR_IICMode register by checking if it is in 10-bit address group or 7-bit address group. - * (If first five bits of address are assigned with 0xF0, then address mode is 10-bit mode otherwise it is 7-bit mode) + * (If first five bits of address are assigned with 0xF0, then address mode is 10-bit mode otherwise it is 7-bit mode)\n + * @note A 7-bit address should include an additional bit at the LSB for read/write indication. For example, address 0x05 should + * be provided as 0x0a. A 10-bit address should be provided with the identifier 0b11110xx at the most significant bits. For example, + * address 0x305 should be provided as 0x7b05(bitwise OR with 0x7800). * * \parRelated APIs:
* XMC_I2C_CH_GetSlaveAddress()\n\n @@ -450,7 +459,9 @@ void XMC_I2C_CH_SetSlaveAddress(XMC_USIC_CH_t *const channel, const uint16_t add * * \par * Returns the address using PCR_IICMode register by checking if it is in 10-bit address group or 7-bit address group.
- * (If first five bits of address are assigned with 0xF0, then address mode is considered as 10-bit mode otherwise it is 7-bit mode) + * (If first five bits of address are assigned with 0xF0, then address mode is considered as 10-bit mode otherwise it is 7-bit mode)\n + * @note A 7-bit address will include an additional bit at the LSB. For example, address 0x05 will be returned as 0x0a. + * 10-bit address will not include the 10-bit address identifier 0b11110xx at the most signifcant bits. * * \parRelated APIs:
* XMC_I2C_CH_SetSlaveAddress()\n\n @@ -467,7 +478,11 @@ uint16_t XMC_I2C_CH_GetSlaveAddress(const XMC_USIC_CH_t *const channel); * Starts the I2C master \a channel.
* * \par - * Sends the Start condition with read/write command by updating IN/TBUF register based on FIFO/non-FIFO modes. + * Sends the Start condition with read/write command by updating IN/TBUF register based on FIFO/non-FIFO modes.\n + * @note Address(addr) should reserve an additional bit at the LSB for read/write indication. For example, address 0x05 should + * be provided as 0x0a. If the address is 10-bit, only most significant bits with the 10-bit identifier should be sent using this function. + * For example, if the 10-bit address is 0x305, the address should be provided as 0xf6(prepend with 0b11110, upper two bits of address 0b11, + * followed by 1-bit field for read/write). * * \parRelated APIs:
* XMC_I2C_CH_MasterTransmit(), XMC_USIC_CH_GetTransmitBufferStatus()\n\n @@ -484,7 +499,11 @@ void XMC_I2C_CH_MasterStart(XMC_USIC_CH_t *const channel, const uint16_t addr, c * Sends the repeated start condition from I2C master \a channel.
* * \par - * Sends the repeated start condition with read/write command by updating IN/TBUF register based on FIFO/non-FIFO modes. + * Sends the repeated start condition with read/write command by updating IN/TBUF register based on FIFO/non-FIFO modes.\n + * @note Address(addr) should reserve an additional bit at the LSB for read/write indication. For example, address 0x05 should + * be provided as 0x0a. If the address is 10-bit, only most significant bits with the 10-bit identifier should be sent using this function. + * For example, if the 10-bit address is 0x305, the address should be provided as 0xf6(prepend with 0b11110, upper two bits of address 0b11, + * followed by 1-bit field for read/write). * * \parRelated APIs:
* XMC_I2C_CH_MasterTransmit(), XMC_USIC_CH_GetTransmitBufferStatus()\n\n @@ -711,6 +730,43 @@ __STATIC_INLINE void XMC_I2C_CH_DisableAcknowledgeAddress0(XMC_USIC_CH_t *const channel->PCR_IICMode &= ~USIC_CH_PCR_IICMode_ACK00_Msk; } +/** + * @param channel Constant pointer to USIC channel handle of type @ref XMC_USIC_CH_t \n + * \b Range: @ref XMC_I2C0_CH0, @ref XMC_I2C0_CH1,@ref XMC_I2C1_CH0,@ref XMC_I2C1_CH1,@ref XMC_I2C2_CH0,@ref XMC_I2C2_CH1 @note Availability of I2C1 and I2C2 depends on device selection + * @return None + * + * \parDescription
+ * Enable data transmission.\n\n + * Use this function in combination with XMC_I2C_CH_DisableDataTransmission() to fill the FIFO and send the FIFO content without gaps in the transmission. + * FIFO is filled using XMC_USIC_CH_TXFIFO_PutData(). + * @note If you need more control over the start of transmission use XMC_USIC_CH_SetStartTransmisionMode() + * + * \parRelated APIs:
+ * XMC_I2C_CH_DisableDataTransmission()\n\n\n + */ +__STATIC_INLINE void XMC_I2C_CH_EnableDataTransmission(XMC_USIC_CH_t *const channel) +{ + XMC_USIC_CH_SetStartTransmisionMode(channel, XMC_USIC_CH_START_TRANSMISION_ON_TDV); +} + +/** + * @param channel Constant pointer to USIC channel handle of type @ref XMC_USIC_CH_t \n + * \b Range: @ref XMC_I2C0_CH0, @ref XMC_I2C0_CH1,@ref XMC_I2C1_CH0,@ref XMC_I2C1_CH1,@ref XMC_I2C2_CH0,@ref XMC_I2C2_CH1 @note Availability of I2C1 and I2C2 depends on device selection + * @return None + * + * \parDescription
+ * Disable data transmission.\n\n + * Use this function in combination with XMC_I2C_CH_EnableDataTransmission() to fill the FIFO and send the FIFO content without gaps in the transmission. + * FIFO is filled using XMC_USIC_CH_TXFIFO_PutData(). + * + * \parRelated APIs:
+ * XMC_I2C_CH_EnableDataTransmission()\n\n\n + */ +__STATIC_INLINE void XMC_I2C_CH_DisableDataTransmission(XMC_USIC_CH_t *const channel) +{ + XMC_USIC_CH_SetStartTransmisionMode(channel, XMC_USIC_CH_START_TRANSMISION_DISABLED); +} + #ifdef __cplusplus } #endif diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_i2s.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_i2s.h index 01b22448..77c18076 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_i2s.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_i2s.h @@ -1,12 +1,12 @@ /** * @file xmc_i2s.h - * @date 2015-10-27 + * @date 2016-06-30 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -51,6 +51,12 @@ * 2015-09-14: * - Modified XMC_I2S_CH_SetSystemWordLength for supporting up to 63 system word length
* + * 2016-05-20: + * - Added XMC_I2S_CH_EnableDataTransmission() and XMC_I2S_CH_DisableDataTransmission() + * + * 2016-06-30: + * - Documentation updates. + * * @endcond * */ @@ -222,13 +228,15 @@ typedef enum XMC_I2S_CH_BUS_MODE */ typedef struct XMC_I2S_CH_CONFIG { - uint32_t baudrate; /**< Module baud rate for communication */ - uint8_t data_bits; /**< Number of bits for the data field. Value configured as USIC channel word length. \n + uint32_t baudrate; /**< Module baud rate for communication */ + uint8_t data_bits; /**< Data word length. A data frame can consists of several data words. \n + Value configured as USIC channel word length. \n \b Range: minimum= 1, maximum= 16*/ - uint8_t frame_length; /**< Indicates number of bits in a frame. Configured as USIC channel frame length. \n + uint8_t frame_length; /**< Number of data bits transferred after a change of signal WA (data frame). \n + Configured as USIC channel frame length. \n \b Range: minimum= 1, maximum= 63*/ - uint8_t data_delayed_sclk_periods; /**< Data delay defined in sclk periods*/ - XMC_I2S_CH_WA_POLARITY_t wa_inversion; /**< Enable inversion of Slave select signal relative to the internal WA*/ + uint8_t data_delayed_sclk_periods; /**< Data delay defined in sclk periods */ + XMC_I2S_CH_WA_POLARITY_t wa_inversion; /**< Enable inversion of Slave select signal relative to the internal WA */ XMC_I2S_CH_BUS_MODE_t bus_mode; /**< Bus mode MASTER/SLAVE */ } XMC_I2S_CH_CONFIG_t; @@ -239,6 +247,29 @@ typedef struct XMC_I2S_CH_CONFIG #ifdef __cplusplus extern "C" { #endif + +/** + * @param channel Constant pointer to USIC channel handle of type @ref XMC_USIC_CH_t \n + * \b Range: @ref XMC_I2S0_CH0, XMC_I2S0_CH1,XMC_I2S1_CH0, XMC_I2S1_CH1,XMC_I2S2_CH0, XMC_I2S2_CH1 @note Availability of I2S1 and I2S2 depends on device selection + * @param config Constant pointer to I2S configuration structure of type @ref XMC_I2S_CH_CONFIG_t. + * @return XMC_I2S_CH_STATUS_t Status of initializing the USIC channel for I2S protocol.\n + * \b Range: @ref XMC_I2S_CH_STATUS_OK if initialization is successful.\n + * @ref XMC_I2S_CH_STATUS_ERROR if configuration of baudrate failed. + * + * \parDescription
+ * Initializes the USIC channel for I2S protocol.\n\n + * During the initialization, USIC channel is enabled and baudrate is configured. + * After each change of the WA signal, a complete data frame is intended to be transferred (frame length <= system word length). + * The number of data bits transferred after a change of signal WA is defined by config->frame_length. + * A data frame can consist of several data words with a data word length defined by config->data_bits. + * The changes of signal WA define the system word length as the number of SCLK cycles between two changes of WA. + * The system word length is set by default to the frame length defined by config->frame_length. + * + * XMC_I2S_CH_Start() should be invoked after the initialization to enable the channel. + * + * \parRelated APIs:
+ * XMC_I2S_CH_Start(), XMC_I2S_CH_Stop(), XMC_I2S_CH_Transmit(), XMC_I2S_CH_SetSystemWordLength()\n\n\n + */ void XMC_I2S_CH_Init(XMC_USIC_CH_t *const channel, const XMC_I2S_CH_CONFIG_t *const config); /** @@ -755,6 +786,43 @@ __STATIC_INLINE void XMC_I2S_CH_DisableDelayCompensation(XMC_USIC_CH_t *const ch XMC_USIC_CH_DisableDelayCompensation(channel); } +/** + * @param channel Constant pointer to USIC channel handle of type @ref XMC_USIC_CH_t \n + * \b Range: @ref XMC_I2S0_CH0, @ref XMC_I2S0_CH1,@ref XMC_I2S1_CH0,@ref XMC_I2S1_CH1,@ref XMC_I2S2_CH0,@ref XMC_I2S2_CH1 @note Availability of I2S1 and I2S2 depends on device selection + * @return None + * + * \parDescription
+ * Enable data transmission.\n\n + * Use this function in combination with XMC_I2S_CH_DisableDataTransmission() to fill the FIFO and send the FIFO content without gaps in the transmission. + * FIFO is filled using XMC_USIC_CH_TXFIFO_PutData(). + * @note If you need more control over the start of transmission use XMC_USIC_CH_SetStartTransmisionMode() + * + * \parRelated APIs:
+ * XMC_I2S_CH_DisableDataTransmission()\n\n\n + */ +__STATIC_INLINE void XMC_I2S_CH_EnableDataTransmission(XMC_USIC_CH_t *const channel) +{ + XMC_USIC_CH_SetStartTransmisionMode(channel, XMC_USIC_CH_START_TRANSMISION_ON_TDV); +} + +/** + * @param channel Constant pointer to USIC channel handle of type @ref XMC_USIC_CH_t \n + * \b Range: @ref XMC_I2S0_CH0, @ref XMC_I2S0_CH1,@ref XMC_I2S1_CH0,@ref XMC_I2S1_CH1,@ref XMC_I2S2_CH0,@ref XMC_I2S2_CH1 @note Availability of I2S1 and I2S2 depends on device selection + * @return None + * + * \parDescription
+ * Disable data transmission.\n\n + * Use this function in combination with XMC_I2S_CH_EnableDataTransmission() to fill the FIFO and send the FIFO content without gaps in the transmission. + * FIFO is filled using XMC_USIC_CH_TXFIFO_PutData(). + * + * \parRelated APIs:
+ * XMC_I2S_CH_EnableDataTransmission()\n\n\n + */ +__STATIC_INLINE void XMC_I2S_CH_DisableDataTransmission(XMC_USIC_CH_t *const channel) +{ + XMC_USIC_CH_SetStartTransmisionMode(channel, XMC_USIC_CH_START_TRANSMISION_DISABLED); +} + #ifdef __cplusplus } #endif diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ledts.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ledts.h index 11458490..65df18a1 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ledts.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_ledts.h @@ -1,12 +1,12 @@ /** * @file xmc_ledts.h - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_math.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_math.h new file mode 100644 index 00000000..5cd606a6 --- /dev/null +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_math.h @@ -0,0 +1,1088 @@ +/** + * @file xmc_math.h + * @date 2015-10-08 + * + * @cond + ********************************************************************************** + * XMClib v2.1.8 - XMC Peripheral Driver Library + * + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification,are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * To improve the quality of the software, users are encouraged to share + * modifications, enhancements or bug fixes with Infineon Technologies AG + * dave@infineon.com). + ********************************************************************************** + * + * Change History + * -------------- + * + * 2015-06-20: + * - Removed version macros and declaration of GetDriverVersion API
+ * - Updated copyright and change history section. + * + * 2015-08-25: + * - XMC_MATH_ClearEvent() API is updated to set the event clear flag bit.
+ * + * 2015-09-23: + * - Added SQRT functions + * + * 2015-10-08: + * - Return values for sin(), cos(), sinh(), cosh(), arctan() are corrected. + * + * @endcond + * + */ + +#ifndef XMC_MATH_H +#define XMC_MATH_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************************************************************************************************************* + * HEADER FILES + ********************************************************************************************************************/ +#include + +#if defined(MATH) +#include + +/** + * @addtogroup XMClib + * @{ + */ + +/** + * @addtogroup MATH + * @{ + * @brief MATH Coprocessor (MATH) driver for the XMC1302 microcontroller family
+ * + * The MATH Coprocessor (MATH) module comprises of two independent sub-blocks to support the CPU in math-intensive + * computations: a Divider Unit (DIV) for signed and unsigned 32-bit division operations and a CORDIC + * (COrdinate Rotation DIgital Computer) Coprocessor for computation of trigonometric, linear or hyperbolic functions.
+ * + * MATH driver features: + * -# CORDIC Coprocessor is used for computation of trigonometric and hyperbolic functions + * -# Supports result chaining between the Divider Unit and CORDIC Coprocessor + * -# All MATH APIs are available in Blocking and non-blocking modes. Non-blocking APIs are suffixed with NB. + * -# 32bit signed and unsigned division implementations available for __aeabi_uidiv(), __aeabi_idiv(), __aeabi_uidivmod(), __aeabi_idivmod() + * -# Divider and CORDIC unit busy status can be checked by XMC_MATH_DIV_IsBusy() and XMC_MATH_CORDIC_IsBusy() + * -# Individual APIs available to return the result of each non-blocking MATH function + * + * Note:
+ * All non-blocking MATH APIs are not atomic and hence occurence of interrupts during the normal execution of + * these APIs may lead to erroneous results. User has to exercise caution while using these APIs. + * + * Example: + * Execution of divide instruction (/) in an ISR during the normal execution of non-blocking APIs may give erroneous results. + * + */ + + +/********************************************************************************************************************* + * TYPE DEFINITIONS + ********************************************************************************************************************/ +/** + * @brief This typedef is used for Input and Output Data representation in blocking & non-blocking functions. + * XMC_MATH_Q0_23_t => 1 Signed bit, 0 Integer bits, 23 fraction bits. + */ +typedef int32_t XMC_MATH_Q0_23_t; + +/** + * @brief This typedef is used for Input Data representation in blocking & non-blocking functions. + * XMC_MATH_Q8_15_t => 1 Signed bit, 8 Integer bits, 15 fraction bits. + */ +typedef int32_t XMC_MATH_Q8_15_t; + +/** + * @brief This typedef is used for Output Data representation in blocking & non-blocking functions. + * XMC_MATH_Q1_22_t => 1 Signed bit, 1 Integer bits, 22 fraction bits. + */ +typedef int32_t XMC_MATH_Q1_22_t; + +/** + * @brief This typedef is used for Output Data representation in blocking & non-blocking functions. + * XMC_MATH_Q0_11_t => 1 Signed bit, 0 Integer bits, 11 fraction bits. + */ +typedef int32_t XMC_MATH_Q0_11_t; + +/********************************************************************************************************************* + * MACROS + ********************************************************************************************************************/ +/* Utility macros */ +#define XMC_MATH_Q0_23(x) ((XMC_MATH_Q0_23_t)(((x) >= 0) ? ((x) * (1 << 23) + 0.5) : ((x) * (1 << 23) - 0.5))) /**< Converts the given number to XMC_MATH_Q0_23_t format */ +#define XMC_MATH_Q0_11(x) ((XMC_MATH_Q0_11_t)(((x) >= 0) ? ((x) * (1 << 11) + 0.5) : ((x) * (1 << 11) - 0.5))) /**< Converts the given number to XMC_MATH_Q0_11_t format */ + +/********************************************************************************************************************* + * ENUMS + ********************************************************************************************************************/ + +/** + * @brief Service request events for the DIV and CORDIC modules + */ +typedef enum XMC_MATH_EVENT +{ + XMC_MATH_EVENT_DIV_END_OF_CALC = 1U, /**< Divider end of calculation event */ + XMC_MATH_EVENT_DIV_ERROR = 2U, /**< Divider error event */ + XMC_MATH_EVENT_CORDIC_END_OF_CALC = 4U, /**< CORDIC end of calculation event */ + XMC_MATH_EVENT_CORDIC_ERROR = 8U /**< CORDIC error event */ +} XMC_MATH_EVENT_t; + +/** + * @brief Dividend Register Result Chaining + */ +typedef enum XMC_MATH_DIV_DVDRC +{ + XMC_MATH_DIV_DVDRC_DISABLED = 0U << MATH_GLBCON_DVDRC_Pos, /**< No result chaining is selected */ + XMC_MATH_DIV_DVDRC_QUOT_IS_SOURCE = 1U << MATH_GLBCON_DVDRC_Pos, /**< QUOT register is the selected source */ + XMC_MATH_DIV_DVDRC_RMD_IS_SOURCE = 2U << MATH_GLBCON_DVDRC_Pos, /**< RMD register is the selected source */ + XMC_MATH_DIV_DVDRC_CORRX_IS_SOURCE = 3U << MATH_GLBCON_DVDRC_Pos, /**< CORRX is the selected source */ + XMC_MATH_DIV_DVDRC_CORRY_IS_SOURCE = 4U << MATH_GLBCON_DVDRC_Pos, /**< CORRY is the selected source */ + XMC_MATH_DIV_DVDRC_CORRZ_IS_SOURCE = 5U << MATH_GLBCON_DVDRC_Pos /**< CORRZ is the selected source */ +} XMC_MATH_DIV_DVDRC_t; + +/** + * @brief Divisor Register Result Chaining + */ +typedef enum XMC_MATH_DIV_DVSRC +{ + XMC_MATH_DIV_DVSRC_DISABLED = 0U << MATH_GLBCON_DVSRC_Pos, /**< No result chaining is selected */ + XMC_MATH_DIV_DVSRC_QUOT_IS_SOURCE = 1U << MATH_GLBCON_DVSRC_Pos, /**< QUOT register is the selected source */ + XMC_MATH_DIV_DVSRC_RMD_IS_SOURCE = 2U << MATH_GLBCON_DVSRC_Pos, /**< RMD register is the selected source */ + XMC_MATH_DIV_DVSRC_CORRX_IS_SOURCE = 3U << MATH_GLBCON_DVSRC_Pos, /**< CORRX is the selected source */ + XMC_MATH_DIV_DVSRC_CORRY_IS_SOURCE = 4U << MATH_GLBCON_DVSRC_Pos, /**< CORRY is the selected source */ + XMC_MATH_DIV_DVSRC_CORRZ_IS_SOURCE = 5U << MATH_GLBCON_DVSRC_Pos /**< CORRZ is the selected source */ +} XMC_MATH_DIV_DVSRC_t; + +/** + * @brief CORDX Register Result Chaining + */ +typedef enum XMC_MATH_CORDIC_CORDXRC +{ + XMC_MATH_CORDIC_CORDXRC_DISABLED = 0U << MATH_GLBCON_CORDXRC_Pos, /**< No result chaining is selected */ + XMC_MATH_CORDIC_CORDXRC_QUOT_IS_SOURCE = 1U << MATH_GLBCON_CORDXRC_Pos, /**< QUOT register is the selected source */ + XMC_MATH_CORDIC_CORDXRC_RMD_IS_SOURCE = 2U << MATH_GLBCON_CORDXRC_Pos /**< RMD register is the selected source */ +} XMC_MATH_CORDIC_CORDXRC_t; + +/** + * @brief CORDY Register Result Chaining + */ +typedef enum XMC_MATH_CORDIC_CORDYRC +{ + XMC_MATH_CORDIC_CORDYRC_DISABLED = 0U << MATH_GLBCON_CORDYRC_Pos, /**< No result chaining is selected */ + XMC_MATH_CORDIC_CORDYRC_QUOT_IS_SOURCE = 1U << MATH_GLBCON_CORDYRC_Pos, /**< QUOT register is the selected source */ + XMC_MATH_CORDIC_CORDYRC_RMD_IS_SOURCE = 2U << MATH_GLBCON_CORDYRC_Pos /**< RMD register is the selected source */ +} XMC_MATH_CORDIC_CORDYRC_t; + +/** + * @brief CORDZ Register Result Chaining + */ +typedef enum XMC_MATH_CORDIC_CORDZRC +{ + XMC_MATH_CORDIC_CORDZRC_DISABLED = 0U << MATH_GLBCON_CORDZRC_Pos, /**< No result chaining is selected */ + XMC_MATH_CORDIC_CORDZRC_QUOT_IS_SOURCE = 1U << MATH_GLBCON_CORDZRC_Pos, /**< QUOT register is the selected source */ + XMC_MATH_CORDIC_CORDZRC_RMD_IS_SOURCE = 2U << MATH_GLBCON_CORDZRC_Pos /**< RMD register is the selected source */ +} XMC_MATH_CORDIC_CORDZRC_t; +/** + * @brief CORDIC operating mode + */ +typedef enum XMC_MATH_CORDIC_OPERATING_MODE +{ + XMC_MATH_CORDIC_OPERATING_MODE_LINEAR = 0U << MATH_CON_MODE_Pos, /**< Linear mode */ + XMC_MATH_CORDIC_OPERATING_MODE_CIRCULAR = 1U << MATH_CON_MODE_Pos, /**< Circular mode */ + XMC_MATH_CORDIC_OPERATING_MODE_HYPERBOLIC = 3U << MATH_CON_MODE_Pos /**< Hyperbolic mode */ +} XMC_MATH_CORDIC_OPERATING_MODE_t; + +/** + * @brief Rotation vectoring selection + */ +typedef enum XMC_MATH_CORDIC_ROTVEC_MODE +{ + XMC_MATH_CORDIC_ROTVEC_MODE_VECTORING = 0U << MATH_CON_ROTVEC_Pos, /**< Vectoring mode */ + XMC_MATH_CORDIC_ROTVEC_MODE_ROTATION = 1U << MATH_CON_ROTVEC_Pos /**< Rotation mode */ +} XMC_MATH_CORDIC_ROTVEC_MODE_t; + +/** + * @brief Calculated value of CORRX and CORRY are each divided by this factor to yield the result. + */ +typedef enum XMC_MATH_CORDIC_MAGNITUDE +{ + XMC_MATH_CORDIC_MAGNITUDE_DIVBY1 = 0U << MATH_CON_MPS_Pos, /**< Divide by 1 */ + XMC_MATH_CORDIC_MAGNITUDE_DIVBY2 = 1U << MATH_CON_MPS_Pos, /**< Divide by 2 */ + XMC_MATH_CORDIC_MAGNITUDE_DIVBY4 = 2U << MATH_CON_MPS_Pos, /**< Divide by 4 */ +} XMC_MATH_CORDIC_MAGNITUDE_t; + +/********************************************************************************************************************* + * DATA STRUCTURES + ********************************************************************************************************************/ + +/********************************************************************************************************************* + * API Prototypes - General + ********************************************************************************************************************/ + +/** + * + * @return None + * + * \parDescription:
+ * Enables the Math module by un-gating the clock. + * + * \par + * MATH coprocessor's clock is enabled by setting \a MATH bit of \a CGATCLR0 register. + * + * \parRelated APIs:
+ * XMC_MATH_Disable()\n\n\n + * + */ +__STATIC_INLINE void XMC_MATH_Enable(void) +{ + /* Un-gates clock to the MATH kernel */ + XMC_SCU_CLOCK_UngatePeripheralClock(XMC_SCU_PERIPHERAL_CLOCK_MATH); +} + +/** + * + * @return None + * + * \parDescription:
+ * Disables the Math module by gating the clock. + * + * \par + * MATH coprocessor's clock is disabled by setting \a MATH bit of \a CGATSET0 register. + * + * \parRelated APIs:
+ * XMC_MATH_Disable()\n\n\n + * + */ +__STATIC_INLINE void XMC_MATH_Disable(void) +{ + /* Gates clock to the MATH kernel */ + XMC_SCU_CLOCK_GatePeripheralClock(XMC_SCU_PERIPHERAL_CLOCK_MATH); +} + +/** + * + * @return bool \n + * true - if DIV unit is busy + * false - if DIV unit is not busy + * + * \parDescription:
+ * Utility function to check if the DIV unit is busy. + * + * \par + * Divider unit status is determined by reading \a BSY bit of \a DIVST register. + * + */ +bool XMC_MATH_DIV_IsBusy(void); + +/** + * + * @return bool \n + * true - if CORDIC unit is busy\n + * false - if CORDIC unit is not busy + * + * \parDescription:
+ * Utility function to check if the DIV unit is busy. + * + * \par + * CORDIC coprocessor's status is determined by reading \a BSY bit of \a STATC register. + * + */ +bool XMC_MATH_CORDIC_IsBusy(void); + +/** + * @param event Event of type XMC_MATH_EVENT_t + * + * @return bool\n + * true - if status is set\n + * false - if status is not set + * + * \parDescription:
+ * Returns the status of the requested event. + * + * \par + * Status of DIV & CORDIC unit's event (end of calculation & error) status is determined by reading \a EVFR register. + * + * \parRelated APIs:
+ * XMC_MATH_EnableEvent(), XMC_MATH_DisableEvent(), XMC_MATH_SetEvent(), XMC_MATH_ClearEvent()\n\n\n + * + */ +bool XMC_MATH_GetEventStatus(const XMC_MATH_EVENT_t event); + +/** + * @param event Event of type XMC_MATH_EVENT_t + * + * @return None + * + * \parDescription:
+ * Enables the requested event. + * + * \par + * DIV & CORDIC unit's event (end of calculation & error) is enabled by setting bit-fields of \a EVIER register. + * + * \parRelated APIs:
+ * XMC_MATH_GetEventStatus(), XMC_MATH_DisableEvent()\n\n\n + * + */ +__STATIC_INLINE void XMC_MATH_EnableEvent(const XMC_MATH_EVENT_t event) +{ + MATH->EVIER |= (uint32_t) event; +} + +/** + * @param event Event of type XMC_MATH_EVENT_t + * + * @return None + * + * \parDescription:
+ * Disables the requested event. + * + * \par + * DIV & CORDIC unit's event (end of calculation & error) is disabled by clearing bit-fields of \a EVIER register. + * + * \parRelated APIs:
+ * XMC_MATH_GetEventStatus(), XMC_MATH_EnableEvent()\n\n\n + * + */ +__STATIC_INLINE void XMC_MATH_DisableEvent(const XMC_MATH_EVENT_t event) +{ + MATH->EVIER &= ~((uint32_t) event); +} + +/** + * @param event Event of type XMC_MATH_EVENT_t + * + * @return None + * + * \parDescription:
+ * Sets the requested event. This is a software setting for the event. + * + * \par + * DIV & CORDIC unit's event (end of calculation & error) is set by setting bit-fields of \a EVFSR register. + * + * \parRelated APIs:
+ * XMC_MATH_ClearEvent()\n\n\n + * + */ +__STATIC_INLINE void XMC_MATH_SetEvent(const XMC_MATH_EVENT_t event) +{ + MATH->EVFSR |= (uint32_t) event; +} + +/** + * @param event Event of type XMC_MATH_EVENT_t + * + * @return None + * + * \parDescription:
+ * Clears the requested event. + * + * \par + * DIV & CORDIC unit's event (end of calculation & error) is cleared by setting bit-fields of \a EVFCR register. + * + * \parRelated APIs:
+ * XMC_MATH_SetEvent()\n\n\n + * + */ +__STATIC_INLINE void XMC_MATH_ClearEvent(const XMC_MATH_EVENT_t event) +{ + MATH->EVFCR |= (uint32_t) event; +} + +/** + * @return XMC_MATH_Q0_23_t + * + * \parDescription:
+ * Returns result of a Cosine operation. + * + * \par + * Most significant 24 bits of \a CORRX register returns the result of Cosine operation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_CosNB()\n\n\n + * + */ +__STATIC_INLINE XMC_MATH_Q0_23_t XMC_MATH_CORDIC_GetCosResult(void) +{ + return ((XMC_MATH_Q0_23_t) (((int32_t)MATH->CORRX) >> MATH_CORRX_RESULT_Pos)); +} + +/** + * @return XMC_MATH_Q0_23_t + * + * \parDescription:
+ * Returns result of a Sine operation. + * + * \par + * Most significant 24 bits of \a CORRY register returns the result of Sine operation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_SinNB()\n\n\n + * + */ +__STATIC_INLINE XMC_MATH_Q0_23_t XMC_MATH_CORDIC_GetSinResult(void) +{ + return ((XMC_MATH_Q0_23_t) (((int32_t)MATH->CORRY) >> MATH_CORRY_RESULT_Pos)); +} + +/** + * @return XMC_MATH_Q0_11_t + * + * \parDescription:
+ * Returns result of a Tangent operation. + * + * \par + * \a QUOT register returns the result of Tangent operation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_TanNB()\n\n\n + * + */ +__STATIC_INLINE XMC_MATH_Q0_11_t XMC_MATH_CORDIC_GetTanResult(void) +{ + return ((XMC_MATH_Q0_11_t) MATH->QUOT); +} + +/** + * @return XMC_MATH_Q0_23_t + * + * \parDescription:
+ * Returns result of a Arc Tangent operation. + * + * \par + * Most significant 24 bits of \a CORRZ register returns the result of Arc Tangent operation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_ArcTanNB()\n\n\n + * + */ +__STATIC_INLINE XMC_MATH_Q0_23_t XMC_MATH_CORDIC_GetArcTanResult(void) +{ + return ((XMC_MATH_Q0_23_t) (((int32_t)MATH->CORRZ) >> MATH_CORRZ_RESULT_Pos)); +} + +/** + * @return XMC_MATH_Q1_22_t + * + * \parDescription:
+ * Returns result of a Hyperbolic Cosine operation. + * + * \par + * Most significant 24 bits of \a CORRX register returns the result of Hyperbolic Cosine operation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_CoshNB()\n\n\n + * + */ +__STATIC_INLINE XMC_MATH_Q1_22_t XMC_MATH_CORDIC_GetCoshResult(void) +{ + return ((XMC_MATH_Q1_22_t) (((int32_t)MATH->CORRX) >> MATH_CORRX_RESULT_Pos)); +} + +/** + * @return XMC_MATH_Q1_22_t + * + * \parDescription:
+ * Returns result of a Hyperbolic Sine operation. + * + * \par + * Most significant 24 bits of \a CORRY register returns the result of Hyperbolic Sine operation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_SinhNB()\n\n\n + * + */ +__STATIC_INLINE XMC_MATH_Q1_22_t XMC_MATH_CORDIC_GetSinhResult(void) +{ + return ((XMC_MATH_Q1_22_t) (((int32_t)MATH->CORRY) >> MATH_CORRY_RESULT_Pos)); +} + +/** + * @return XMC_MATH_Q0_11_t + * + * \parDescription:
+ * Returns result of a Hyperbolic Tangent operation. + * + * \par + * \a QUOT register returns the result of Hyperbolic Tangent operation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_TanhNB()\n\n\n + * + */ +__STATIC_INLINE XMC_MATH_Q0_11_t XMC_MATH_CORDIC_GetTanhResult(void) +{ + return ((XMC_MATH_Q0_11_t) MATH->QUOT); +} + +/** + * @return uint32_t + * + * \parDescription:
+ * Returns result of a Unsigned Division operation. + * + * \par + * \a QUOT register returns the result of Unsigned Division operation. + * + * \parRelated APIs:
+ * XMC_MATH_DIV_UnsignedDivNB()\n\n\n + * + */ +__STATIC_INLINE uint32_t XMC_MATH_DIV_GetUnsignedDivResult(void) +{ + return ((uint32_t) MATH->QUOT); +} + +/** + * @return uint32_t + * + * \parDescription:
+ * Returns result of a Unsigned Modulo operation. + * + * \par + * \a RMD register returns the result of Unsigned Modulo operation. + * + * \parRelated APIs:
+ * XMC_MATH_DIV_UnsignedModNB()\n\n\n + * + */ +__STATIC_INLINE uint32_t XMC_MATH_DIV_GetUnsignedModResult(void) +{ + return ((uint32_t) MATH->RMD); +} + +/** + * @return int32_t + * + * \parDescription:
+ * Returns result of a Signed Division operation. + * + * \par + * \a QUOT register returns the result of Signed Division operation. + * + * \parRelated APIs:
+ * XMC_MATH_DIV_SignedDivNB()\n\n\n + * + */ +__STATIC_INLINE int32_t XMC_MATH_DIV_GetSignedDivResult(void) +{ + return ((int32_t) MATH->QUOT); +} + +/** + * @return int32_t + * + * \parDescription:
+ * Returns result of a Signed Modulo operation. + * + * \par + * \a RMD register returns the result of Signed Modulo operation. + * + * \parRelated APIs:
+ * XMC_MATH_DIV_SignedModNB()\n\n\n + * + */ +__STATIC_INLINE int32_t XMC_MATH_DIV_GetSignedModResult(void) +{ + return ((int32_t) MATH->RMD); +} + +/*********************************************************************************************************************** + * API Prototypes - Blocking functions + **********************************************************************************************************************/ +/** + * @param angle_in_radians - Normalised Angle in Radians (XMC_MATH_Q0_23_t format) + * + * @return XMC_MATH_Q0_23_t
+ * + * \parDescription:
+ * Computes the cosine for an angle in radians \e angle_in_radians. + * The input angle in radians must be in XMC_MATH_Q0_23_t format. + * + * \par + * This function programs CORDIC to rotation & circular mode. + * Configures \a CORDZ register with input \a angle_in_radians and \a CORDX register with gain \a XMC_MATH_RECIPROC_CIRCULAR_GAIN_IN_Q023. + * Most significant 24 bits of \a CORRX register returns the result of the operation. + * + * \parNote:
+ * Loading of \a CORDX register triggers the start of computation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_Sin(), XMC_MATH_CORDIC_Tan()\n\n\n + * + */ +XMC_MATH_Q0_23_t XMC_MATH_CORDIC_Cos(XMC_MATH_Q0_23_t angle_in_radians); + +/** + * @param angle_in_radians - Normalised Angle in Radians (XMC_MATH_Q0_23_t format) + * + * @return XMC_MATH_Q0_23_t
+ * + * \parDescription:
+ * Computes the sine for an angle in radians \e angle_in_radians. + * The input angle in radians must be in XMC_MATH_Q0_23_t format. + * + * \par + * This function programs CORDIC to rotation & circular mode. + * Configures \a CORDZ register with input \a angle_in_radians and \a CORDX register with gain \a XMC_MATH_RECIPROC_CIRCULAR_GAIN_IN_Q023. + * Most significant 24 bits of \a CORRY register returns the result of the operation. + * + * \parNote:
+ * Loading of \a CORDX register triggers the start of computation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_Cos(), XMC_MATH_CORDIC_Tan()\n\n\n + * + */ +XMC_MATH_Q0_23_t XMC_MATH_CORDIC_Sin(XMC_MATH_Q0_23_t angle_in_radians); + +/** + * @param angle_in_radians - Normalised Angle in Radians (XMC_MATH_Q0_23_t format) + * + * @return XMC_MATH_Q0_11_t
+ * + * \parDescription:
+ * Computes the tangent for an angle in radians \e angle_in_radians. + * The input angle in radians must be in XMC_MATH_Q0_23_t format. + * + * \par + * This function programs CORDIC to rotation & circular mode. + * Chains the results of Cosine (\a CORRX) and Sine (\a CORRY) as a dividend and divisor by configuring \a GLBCON register. + * \a CORDZ register is programmed with input \a angle_in_radians and \a CORDX register with gain \a XMC_MATH_RECIPROC_CIRCULAR_GAIN_IN_Q023. + * Most significant 24 bits of \a CORRY register returns the result of the operation. + * + * \parNote:
+ * Loading of \a CORDX register triggers the start of computation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_Sin(), XMC_MATH_CORDIC_Cos()\n\n\n + * + */ +XMC_MATH_Q0_11_t XMC_MATH_CORDIC_Tan(XMC_MATH_Q0_23_t angle_in_radians); + +/** + * + * @param x Value representing the proportion of the x-coordinate (XMC_MATH_Q8_15_t format) + * @param y Value representing the proportion of the y-coordinate (XMC_MATH_Q8_15_t format) + * + * @return XMC_MATH_Q0_23_t
+ * + * \parDescription:
+ * Computes the principal value arc tangent of an angle of y/x expressed in radians. + * The input radians must be in XMC_MATH_Q8_15_t format. + * + * \par + * This function programs CORDIC as circular mode. + * \a CORDY register is programmed with input \a y and \a CORDX register is programmed with input \a x. + * Most significant 24 bits of \a CORRZ register returns the result of the operation. + * + * \parNote:
+ * Loading of \a CORDX register triggers the start of computation. + * + */ +XMC_MATH_Q0_23_t XMC_MATH_CORDIC_ArcTan(XMC_MATH_Q8_15_t x, XMC_MATH_Q8_15_t y); + +/** + * @param angle_in_radians - Normalised Angle in Radians (XMC_MATH_Q0_23_t format) + * + * @return XMC_MATH_Q1_22_t
+ * + * \parDescription:
+ * Computes the hyperbolic cosine for an angle in radians \e angle_in_radians. + * The input angle in radians must be in XMC_MATH_Q0_23_t format. + * + * \par + * This function programs CORDIC to rotation & hyperbolic mode. + * Configures \a CORDZ register with input \a angle_in_radians and \a CORDX register with gain \a XMC_MATH_RECIPROC_HYPERBOLIC_GAIN_IN_Q1_22. + * Most significant 24 bits of \a CORRX register returns the result of the operation. + * + * \parNote:
+ * Loading of \a CORDX register triggers the start of computation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_Sinh(), XMC_MATH_CORDIC_Tanh()\n\n\n + * + */ +XMC_MATH_Q1_22_t XMC_MATH_CORDIC_Cosh(XMC_MATH_Q0_23_t angle_in_radians); + +/** + * @param angle_in_radians - Normalised Angle in Radians (XMC_MATH_Q0_23_t format) + * + * @return XMC_MATH_Q1_22_t
+ * + * \parDescription:
+ * Computes the hyperbolic sine for an angle in radians \e angle_in_radians. + * The input angle in radians must be in XMC_MATH_Q0_23_t format. + * + * \par + * This function programs CORDIC to rotation & hyperbolic mode. + * Configures \a CORDZ register with input \a angle_in_radians and \a CORDX register with gain \a XMC_MATH_RECIPROC_HYPERBOLIC_GAIN_IN_Q1_22. + * Most significant 24 bits of \a CORRY register returns the result of the operation. + * + * \parNote:
+ * Loading of \a CORDX register triggers the start of computation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_Cosh(), XMC_MATH_CORDIC_Tanh()\n\n\n + * + */ +XMC_MATH_Q1_22_t XMC_MATH_CORDIC_Sinh(XMC_MATH_Q0_23_t angle_in_radians); + +/** + * @param angle_in_radians - Normalised Angle in Radians (XMC_MATH_Q0_23_t format) + * + * @return XMC_MATH_Q0_11_t
+ * + * \parDescription:
+ * Computes the hyperbolic tangent for an angle in radians \e angle_in_radians. + * The input angle in radians must be in XMC_MATH_Q0_23_t format. + * + * \par + * This function programs CORDIC to rotation & hyperbolic mode. + * Chains the results of Cosine (\a CORRX) and Sine (\a CORRY) as a dividend and divisor by configuring \a GLBCON register. + * \a CORDZ register is programmed with input \a angle_in_radians and \a CORDX register with gain \a XMC_MATH_RECIPROC_HYPERBOLIC_GAIN_IN_Q1_22. + * \a QUOT register returns the result of the operation. + * + * \parNote:
+ * Loading of \a CORDX register triggers the start of computation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_Sinh(), XMC_MATH_CORDIC_Cosh()()\n\n\n + * + */ +XMC_MATH_Q0_11_t XMC_MATH_CORDIC_Tanh(XMC_MATH_Q0_23_t angle_in_radians); + +/*********************************************************************************************************************** + * API Prototypes - Non blocking functions + **********************************************************************************************************************/ +/** + * @param angle_in_radians - Normalised Angle in Radians (XMC_MATH_Q0_23_t format) + * + * @return None
+ * + * \parDescription:
+ * Computes the cosine for an angle in radians \e angle_in_radians. + * The input angle in radians must be in XMC_MATH_Q0_23_t format. + * Call XMC_MATH_CORDIC_GetCosResult() API to get the result. + * + * \par + * This function programs CORDIC to rotation & circular mode. + * Configures \a CORDZ register with input \a angle_in_radians and \a CORDX register with gain \a XMC_MATH_RECIPROC_CIRCULAR_GAIN_IN_Q023. + * + * \parNote:
+ * Loading of \a CORDX register triggers the start of computation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_GetCosResult(), XMC_MATH_EnableEvent(), XMC_MATH_GetEventStatus(), XMC_MATH_ClearEvent()\n\n\n + * + */ +void XMC_MATH_CORDIC_CosNB(XMC_MATH_Q0_23_t angle_in_radians); + +/** + * @param angle_in_radians - Normalised Angle in Radians (XMC_MATH_Q0_23_t format) + * + * @return None
+ * + * \parDescription:
+ * Computes the sine for an angle in radians \e angle_in_radians. + * The input angle in radians must be in XMC_MATH_Q0_23_t format. + * Call XMC_MATH_CORDIC_GetSinResult() API to get the result. + * + * \par + * This function programs CORDIC to rotation & circular mode. + * Configures \a CORDZ register with input \a angle_in_radians and \a CORDX register with gain \a XMC_MATH_RECIPROC_CIRCULAR_GAIN_IN_Q023. + * + * \parNote:
+ * Loading of \a CORDX register triggers the start of computation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_GetSinResult(), XMC_MATH_EnableEvent(), XMC_MATH_GetEventStatus(), XMC_MATH_ClearEvent()\n\n\n + * + */ +void XMC_MATH_CORDIC_SinNB(XMC_MATH_Q0_23_t angle_in_radians); + +/** + * @param angle_in_radians - Normalised Angle in Radians (XMC_MATH_Q0_23_t format) + * + * @return None
+ * + * \parDescription:
+ * Computes the tangent for an angle in radians \e angle_in_radians. + * The input angle in radians must be in XMC_MATH_Q0_23_t format. + * Call XMC_MATH_CORDIC_GetTanResult() API to get the result. + * + * \par + * This function programs CORDIC to rotation & circular mode. + * Chains the results of Cosine (\a CORRX) and Sine (\a CORRY) as a dividend and divisor by configuring \a GLBCON register. + * \a CORDZ register is programmed with input \a angle_in_radians and \a CORDX register with gain \a XMC_MATH_RECIPROC_CIRCULAR_GAIN_IN_Q023. + * + * \parNote:
+ * Loading of \a CORDX register triggers the start of computation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_GetTanResult(), XMC_MATH_EnableEvent(), XMC_MATH_GetEventStatus(), XMC_MATH_ClearEvent()\n\n\n + * + */ +void XMC_MATH_CORDIC_TanNB(XMC_MATH_Q0_23_t angle_in_radians); + +/** + * + * @param x Value representing the proportion of the x-coordinate (XMC_MATH_Q8_15_t format) + * @param y Value representing the proportion of the y-coordinate (XMC_MATH_Q8_15_t format) + * + * @return None
+ * + * \parDescription:
+ * Computes the principal value arc tangent of an angle of y/x expressed in radians. + * The input radians must be in XMC_MATH_Q8_15_t format. + * Call XMC_MATH_CORDIC_GetArcTanResult() API to get the result. + * + * \par + * This function programs CORDIC as circular mode. + * \a CORDY register is programmed with input \a y and \a CORDX register is programmed with input \a x. + * + * \parNote:
+ * Loading of \a CORDX register triggers the start of computation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_GetArcTanResult(), XMC_MATH_EnableEvent(), XMC_MATH_GetEventStatus(), XMC_MATH_ClearEvent()\n\n\n + * + */ +void XMC_MATH_CORDIC_ArcTanNB(XMC_MATH_Q8_15_t x, XMC_MATH_Q8_15_t y); + +/** + * @param angle_in_radians - Normalised Angle in Radians (XMC_MATH_Q0_23_t format) + * + * @return None
+ * + * \parDescription:
+ * Computes the hyperbolic cosine for an angle in radians \e angle_in_radians. + * The input angle in radians must be in XMC_MATH_Q0_23_t format. + * Call XMC_MATH_CORDIC_GetCoshResult() API to get the result. + * + * \par + * This function programs CORDIC to rotation & hyperbolic mode. + * Configures \a CORDZ register with input \a angle_in_radians and \a CORDX register with gain \a XMC_MATH_RECIPROC_HYPERBOLIC_GAIN_IN_Q1_22. + * + * \parNote:
+ * Loading of \a CORDX register triggers the start of computation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_GetCoshResult(), XMC_MATH_EnableEvent(), XMC_MATH_GetEventStatus(), XMC_MATH_ClearEvent()\n\n\n + * + */ +void XMC_MATH_CORDIC_CoshNB(XMC_MATH_Q0_23_t angle_in_radians); + +/** + * @param angle_in_radians - Normalised Angle in Radians (XMC_MATH_Q0_23_t format) + * + * @return None
+ * + * \parDescription:
+ * Computes the hyperbolic sine for an angle in radians \e angle_in_radians. + * The input angle in radians must be in XMC_MATH_Q0_23_t format. + * Call XMC_MATH_CORDIC_GetSinhResult() API to get the result. + * + * \par + * This function programs CORDIC to rotation & hyperbolic mode. + * Configures \a CORDZ register with input \a angle_in_radians and \a CORDX register with gain \a XMC_MATH_RECIPROC_HYPERBOLIC_GAIN_IN_Q1_22. + * + * \parNote:
+ * Loading of \a CORDX register triggers the start of computation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_GetSinhResult(), XMC_MATH_EnableEvent(), XMC_MATH_GetEventStatus(), XMC_MATH_ClearEvent()\n\n\n + * + */ +void XMC_MATH_CORDIC_SinhNB(XMC_MATH_Q0_23_t angle_in_radians); + +/** + * @param angle_in_radians - Normalised Angle in Radians (XMC_MATH_Q0_23_t format) + * + * @return None
+ * + * \parDescription:
+ * Computes the hyperbolic tangent for an angle in radians \e angle_in_radians. + * The input angle in radians must be in XMC_MATH_Q0_23_t format. + * Call XMC_MATH_CORDIC_GetTanhResult() API to get the result. + * + * \par + * This function programs CORDIC to rotation & hyperbolic mode. + * Chains the results of Cosine (\a CORRX) and Sine (\a CORRY) as a dividend and divisor by configuring \a GLBCON register. + * \a CORDZ register is programmed with input \a angle_in_radians and \a CORDX register with gain \a XMC_MATH_RECIPROC_HYPERBOLIC_GAIN_IN_Q1_22. + * + * \parNote:
+ * Loading of \a CORDX register triggers the start of computation. + * + * \parRelated APIs:
+ * XMC_MATH_CORDIC_GetTanhResult(), XMC_MATH_EnableEvent(), XMC_MATH_GetEventStatus(), XMC_MATH_ClearEvent()\n\n\n + * + */ +void XMC_MATH_CORDIC_TanhNB(XMC_MATH_Q0_23_t angle_in_radians); + +/** + * @param dividend - Dividend + * @param divisor - Divisor + * + * @return None
+ * + * \parDescription:
+ * Performs unsigned integer division and computes quotient of the division. + * Call XMC_MATH_DIV_GetUnsignedDivResult() API to get the result. + * + * \par + * Divider unit is configured for unsigned division. + * \a DVD & \a DVS registers are programmed with \a dividend and \a divisor values. + * The division is started with the write to DVS register. + * + * \parNote:
+ * Ensure \e divisor is smaller than \e dividend. + * + * \parRelated APIs:
+ * XMC_MATH_DIV_GetUnsignedDivResult(), XMC_MATH_EnableEvent(), XMC_MATH_GetEventStatus(), XMC_MATH_ClearEvent()\n\n\n + * + */ +void XMC_MATH_DIV_UnsignedDivNB(uint32_t dividend, uint32_t divisor); + +/** + * @param dividend - Dividend + * @param divisor - Divisor + * + * @return None
+ * + * \parDescription:
+ * Performs signed integer division and computes quotient of the division. + * Call XMC_MATH_DIV_GetSignedDivResult() API to get the result. + * + * \par + * Divider unit is configured for signed division. + * \a DVD & \a DVS registers are programmed with \a dividend and \a divisor values. + * The division is started with the write to DVS register. + * + * \parNote:
+ * Ensure \e divisor is smaller than \e dividend. + * + * \parRelated APIs:
+ * XMC_MATH_DIV_GetSignedDivResult(), XMC_MATH_EnableEvent(), XMC_MATH_GetEventStatus(), XMC_MATH_ClearEvent()\n\n\n + * + */ +void XMC_MATH_DIV_SignedDivNB(int32_t dividend, int32_t divisor); + +/** + * @param dividend - Dividend + * @param divisor - Divisor + * + * @return None
+ * + * \parDescription:
+ * Performs unsigned modulo operation and computes remainder of the division. + * Call XMC_MATH_DIV_GetUnsignedModResult() API to get the result. + * + * \par + * Divider unit is configured for unsigned division. + * \a DVD & \a DVS registers are programmed with \a dividend and \a divisor values. + * The division is started with the write to DVS register. + * + * \parNote:
+ * Ensure \e divisor is smaller than \e dividend. + * + * \parRelated APIs:
+ * XMC_MATH_DIV_GetUnsignedModResult(), XMC_MATH_EnableEvent(), XMC_MATH_GetEventStatus(), XMC_MATH_ClearEvent()\n\n\n + * + */ +void XMC_MATH_DIV_UnsignedModNB(uint32_t dividend, uint32_t divisor); + +/** + * @param dividend - Dividend + * @param divisor - Divisor + * + * @return None
+ * + * \parDescription:
+ * Performs signed modulo operation and computes remainder of the division. + * Call XMC_MATH_DIV_GetSignedModResult() API to get the result. + * + * \par + * Divider unit is configured for signed division. + * \a DVD & \a DVS registers are programmed with \a dividend and \a divisor values. + * The division is started with the write to DVS register. + * + * \parNote:
+ * Ensure \e divisor is smaller than \e dividend. + * + * \parRelated APIs:
+ * XMC_MATH_DIV_GetSignedModResult(), XMC_MATH_EnableEvent(), XMC_MATH_GetEventStatus(), XMC_MATH_ClearEvent()\n\n\n + * + */ +void XMC_MATH_DIV_SignedModNB(int32_t dividend, int32_t divisor); + +/** + * @param x - Value whose square root is computed + * + * @return Square root of x
+ * + * \parDescription:
+ * Computes square root of Q15 number + * + * \parNote:
+ * x > 0 + * + */ +int16_t XMC_MATH_CORDIC_Q15_Sqrt(int16_t x); + +/** + * @param x - Value whose square root is computed + * + * @return Square root of x
+ * + * \parDescription:
+ * Computes square root of Q31 number + * + * \parNote:
+ * x > 0 + * + */ +int32_t XMC_MATH_CORDIC_Q31_Sqrt(int32_t x); +/** + * @} + */ + +/** + * @} + */ + +#endif /* end of #if defined(MATH) */ + +#ifdef __cplusplus +} +#endif + +#endif /* XMC_MATH_H */ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_pau.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_pau.h new file mode 100644 index 00000000..12fa65e2 --- /dev/null +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_pau.h @@ -0,0 +1,396 @@ +/** + * @file xmc_pau.h + * @date 2015-06-20 + * + * @cond + ********************************************************************************************************************* + * XMClib v2.1.8 - XMC Peripheral Driver Library + * + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with + * Infineon Technologies AG dave@infineon.com). + ********************************************************************************************************************* + * + * Change History + * -------------- + * + * 2015-02-20: + * - Initial version + * + * 2015-05-20: + * - Documentation updated + * + * 2015-06-20: + * - Removed version macros and declaration of GetDriverVersion API + * @endcond + * + */ + +#ifndef XMC_PAU_H +#define XMC_PAU_H + +/********************************************************************************************************************* + * HEADER FILES + *********************************************************************************************************************/ + +#include "xmc_common.h" + +#if defined(PAU) + +/** + * @addtogroup XMClib XMC Peripheral Library + * @{ + */ + +/** + * @addtogroup PAU + * @brief Peripheral Access Unit (PAU) driver for the XMC1000 microcontroller family + * + * The Peripheral Access Unit (PAU) supports access control of memories and peripherals. + * It allows user application to enable/disable the access to the registers of a peripheral. + * It generates a HardFault exception when there is an access to a disabled or unassigned + * address location. It also provides information on the availability of peripherals and + * sizes of memories. + * + * The PAU low level driver provides functions to check the availability of peripherals + * and to enable/disable peripheral access. + * @{ + */ + +/********************************************************************************************************************* + * MACROS + *********************************************************************************************************************/ + +/** + * A convenient symbol for the PAU peripheral base address + */ +#define XMC_PAU ((XMC_PAU_t *) PAU_BASE) + +/* + * This macro is used in the LLD for assertion checks (XMC_ASSERT) + */ +#define XMC_PAU_CHECK_MODULE_PTR(p) ((p) == XMC_PAU) + +/********************************************************************************************************************* + * ENUMS + *********************************************************************************************************************/ + +/** + * Status return values for PAU low level driver + */ +typedef enum XMC_PAU_STATUS +{ + XMC_PAU_STATUS_OK = 0U, /**< Operation successful */ + XMC_PAU_STATUS_BUSY = 1U, /**< Busy with a previous request */ + XMC_PAU_STATUS_ERROR = 2U /**< Operation unsuccessful */ +} XMC_PAU_STATUS_t; + +/** + * PAU peripheral select + */ +typedef enum XMC_PAU_PERIPHERAL +{ + XMC_PAU_PERIPHERAL_FLASH = PAU_PRIVDIS0_PDIS2_Msk, /**< Flash SFRs Privilege Disable Flag */ + XMC_PAU_PERIPHERAL_RAM_BLOCK1 = PAU_PRIVDIS0_PDIS5_Msk, /**< RAM Block 1 Privilege Disable Flag */ + XMC_PAU_PERIPHERAL_RAM_BLOCK2 = PAU_PRIVDIS0_PDIS6_Msk, /**< RAM Block 2 Privilege Disable Flag */ + XMC_PAU_PERIPHERAL_RAM_BLOCK3 = PAU_PRIVDIS0_PDIS7_Msk, /**< RAM Block 3 Privilege Disable Flag */ + #if defined(WDT) + XMC_PAU_PERIPHERAL_WDT = PAU_PRIVDIS0_PDIS19_Msk, /**< WDT Privilege Disable Flag */ + #endif + #if defined(MATH) + XMC_PAU_PERIPHERAL_MATH_GLOBAL_AND_DIV = PAU_PRIVDIS0_PDIS20_Msk, /**< MATH Global SFRs and Divider Privilege Disable Flag */ + #endif + #if defined(MATH) + XMC_PAU_PERIPHERAL_MATH_CORDIC = PAU_PRIVDIS0_PDIS21_Msk, /**< MATH CORDIC Privilege Disable Flag */ + #endif + #if defined(PORT0) + XMC_PAU_PERIPHERAL_PORT0 = PAU_PRIVDIS0_PDIS22_Msk, /**< Port 0 Privilege Disable Flag */ + #endif + #if defined(PORT1) + XMC_PAU_PERIPHERAL_PORT1 = PAU_PRIVDIS0_PDIS23_Msk, /**< Port 1 Privilege Disable Flag */ + #endif + #if defined(PORT2) + XMC_PAU_PERIPHERAL_PORT2 = PAU_PRIVDIS0_PDIS24_Msk, /**< Port 2 Privilege Disable Flag */ +#endif +#if defined(PORT3) + XMC_PAU_PERIPHERAL_PORT3 = PAU_PRIVDIS0_PDIS25_Msk, /**< Port 3 Privilege Disable Flag */ +#endif +#if defined(PORT4) + XMC_PAU_PERIPHERAL_PORT4 = PAU_PRIVDIS0_PDIS26_Msk, /**< Port 4 Privilege Disable Flag */ +#endif +#if defined(USIC0) + XMC_PAU_PERIPHERAL_USIC0_CH0 = PAU_PRIVDIS1_PDIS0_Msk | 0x10000000U, /**< USIC0 Channel 0 Privilege Disable Flag */ + XMC_PAU_PERIPHERAL_USIC0_CH1 = PAU_PRIVDIS1_PDIS1_Msk | 0x10000000U, /**< USIC0 Channel 1 Privilege Disable Flag */ +#endif +#if defined(USIC1) + XMC_PAU_PERIPHERAL_USIC1_CH0 = PAU_PRIVDIS1_PDIS16_Msk | 0x10000000U, /**< USIC1 Channel 0 Privilege Disable Flag */ + XMC_PAU_PERIPHERAL_USIC1_CH1 = PAU_PRIVDIS1_PDIS17_Msk | 0x10000000U, /**< USIC1 Channel 1 Privilege Disable Flag */ +#endif +#if defined(PRNG) + XMC_PAU_PERIPHERAL_PRNG = PAU_AVAIL1_AVAIL4_Msk | 0x10000000U, /**< PRNG Availability Flag*/ +#endif +#if defined(VADC) + XMC_PAU_PERIPHERAL_VADC_GLOBAL = PAU_PRIVDIS1_PDIS5_Msk | 0x10000000U, /**< VADC0 Basic SFRs Privilege Disable Flag */ +#if defined(VADC_G0) + XMC_PAU_PERIPHERAL_VADC_GROUP0 = PAU_PRIVDIS1_PDIS6_Msk | 0x10000000U, /**< VADC0 Group 0 SFRs Privilege Disable Flag */ +#endif +#if defined(VADC_G1) + XMC_PAU_PERIPHERAL_VADC_GROUP1 = PAU_PRIVDIS1_PDIS7_Msk | 0x10000000U, /**< VADC0 Group 1 SFRs Privilege Disable Flag */ +#endif +#endif +#if defined(SHS0) + XMC_PAU_PERIPHERAL_VADC_SHS0 = PAU_PRIVDIS1_PDIS8_Msk | 0x10000000U, /**< SHS0 Privilege Disable Flag */ +#endif +#if defined(CCU40) + XMC_PAU_PERIPHERAL_CCU40_CC40_AND_GLOBAL = PAU_PRIVDIS1_PDIS9_Msk | 0x10000000U, /**< CCU40_CC40 and CCU40 Kernel SFRs Privilege Disable Flag */ +#if defined(CCU40_CC41) + XMC_PAU_PERIPHERAL_CCU40_CC41 = PAU_PRIVDIS1_PDIS10_Msk | 0x10000000U, /**< CCU40_CC41 Privilege Disable Flag */ +#endif +#if defined(CCU40_CC42) + XMC_PAU_PERIPHERAL_CCU40_CC42 = PAU_PRIVDIS1_PDIS11_Msk | 0x10000000U, /**< CCU40_CC42 Privilege Disable Flag */ +#endif +#if defined(CCU40_CC43) + XMC_PAU_PERIPHERAL_CCU40_CC43 = PAU_PRIVDIS1_PDIS12_Msk | 0x10000000U, /**< CCU40_CC43 Privilege Disable Flag */ +#endif +#endif +#if defined(CCU41) + XMC_PAU_PERIPHERAL_CCU41_CC40_AND_GLOBAL = PAU_PRIVDIS1_PDIS25_Msk | 0x10000000U, /**< CCU41_CC40 and CCU41 Kernel SFRs Privilege Disable Flag */ +#if defined(CCU41_CC41) + XMC_PAU_PERIPHERAL_CCU41_CC41 = PAU_PRIVDIS1_PDIS26_Msk | 0x10000000U, /**< CCU41_CC41 Privilege Disable Flag */ +#endif +#if defined(CCU41_CC42) + XMC_PAU_PERIPHERAL_CCU41_CC42 = PAU_PRIVDIS1_PDIS27_Msk | 0x10000000U, /**< CCU41_CC42 Privilege Disable Flag */ +#endif +#if defined(CCU41_CC43) + XMC_PAU_PERIPHERAL_CCU41_CC43 = PAU_PRIVDIS1_PDIS28_Msk | 0x10000000U, /**< CCU41_CC43 Privilege Disable Flag */ +#endif +#endif +#if defined(CCU80) + XMC_PAU_PERIPHERAL_CCU80_CC80_AND_GLOBAL = PAU_PRIVDIS2_PDIS0_Msk | 0x20000000U, /**< CCU80_CC80 and CCU80 Kernel SFRs Privilege Disable Flag */ +#if defined(CCU80_CC81) + XMC_PAU_PERIPHERAL_CCU80_CC81 = PAU_PRIVDIS2_PDIS1_Msk | 0x20000000U, /**< CCU80_CC81 Privilege Disable Flag */ +#endif +#if defined(CCU80_CC82) + XMC_PAU_PERIPHERAL_CCU80_CC82 = PAU_PRIVDIS2_PDIS2_Msk | 0x20000000U, /**< CCU80_CC82 Privilege Disable Flag */ +#endif +#if defined(CCU80_CC83) + XMC_PAU_PERIPHERAL_CCU80_CC83 = PAU_PRIVDIS2_PDIS3_Msk | 0x20000000U, /**< CCU80_CC83 Privilege Disable Flag */ +#endif +#endif +#if defined(CCU81) + XMC_PAU_PERIPHERAL_CCU81_CC80_AND_GLOBAL = PAU_PRIVDIS2_PDIS16_Msk | 0x20000000U, /**< CCU81_CC80 and CCU81 Kernel SFRs Privilege Disable Flag */ +#if defined(CCU81_CC81) + XMC_PAU_PERIPHERAL_CCU81_CC81 = PAU_PRIVDIS2_PDIS17_Msk | 0x20000000U, /**< CCU81_CC81 Privilege Disable Flag */ +#endif +#if defined(CCU81_CC82) + XMC_PAU_PERIPHERAL_CCU81_CC82 = PAU_PRIVDIS2_PDIS18_Msk | 0x20000000U, /**< CCU81_CC82 Privilege Disable Flag */ +#endif +#if defined(CCU81_CC83) + XMC_PAU_PERIPHERAL_CCU81_CC83 = PAU_PRIVDIS2_PDIS19_Msk | 0x20000000U, /**< CCU81_CC83 Privilege Disable Flag */ +#endif +#endif +#if defined(POSIF0) + XMC_PAU_PERIPHERAL_POSIF0 = PAU_PRIVDIS2_PDIS12_Msk | 0x20000000U, /**< POSIF0 Privilege Disable Flag */ +#endif +#if defined(POSIF1) + XMC_PAU_PERIPHERAL_POSIF1 = PAU_PRIVDIS2_PDIS28_Msk | 0x20000000U, /**< POSIF1 Privilege Disable Flag */ +#endif +#if defined(LEDTS0) + XMC_PAU_PERIPHERAL_LEDTS0 = PAU_PRIVDIS2_PDIS13_Msk | 0x20000000U, /**< LEDTS0 Privilege Disable Flag */ +#endif +#if defined(LEDTS1) + XMC_PAU_PERIPHERAL_LEDTS1 = PAU_PRIVDIS2_PDIS14_Msk | 0x20000000U, /**< LEDTS1 Privilege Disable Flag */ +#endif +#if defined(LEDTS2) + XMC_PAU_PERIPHERAL_LEDTS2 = PAU_PRIVDIS2_PDIS29_Msk | 0x20000000U, /**< LEDTS2 Privilege Disable Flag */ +#endif +#if defined(BCCU0) + XMC_PAU_PERIPHERAL_BCCU0 = PAU_PRIVDIS2_PDIS15_Msk | 0x20000000U, /**< BCCU0 Privilege Disable Flag */ +#endif +#if defined(CAN) +#if defined(CAN_NODE0) + XMC_PAU_PERIPHERAL_MCAN_NODE0_AND_GLOBAL = PAU_PRIVDIS2_PDIS21_Msk | 0x20000000U, /**< MCAN NODE0 and Global SFRs Privilege */ +#endif +#if defined(CAN_NODE1) + XMC_PAU_PERIPHERAL_MCAN_NODE1_AND_GLOBAL = PAU_PRIVDIS2_PDIS23_Msk | 0x20000000U, /**< MCAN NODE1 Privilege Disable Flag */ +#endif + XMC_PAU_PERIPHERAL_MCAN_OBJECTS = PAU_PRIVDIS2_PDIS28_Msk | 0x20000000U, /**< MCAN Message Objects Privilege Disable Flag */ +#endif +} XMC_PAU_PERIPHERAL_t; + + +/********************************************************************************************************************* + * DATA STRUCTURES + *********************************************************************************************************************/ + + +/** + * External Peripheral Access Unit (PAU) device structure
+ * + * The structure represents a collection of all hardware registers + * used to configure the PAU peripheral on the XMC microcontroller. + * The registers can be accessed with ::XMC_PAU. + */ +typedef struct +{ + __I uint32_t RESERVED0[16]; + __I uint32_t AVAIL[3]; + __I uint32_t RESERVED1[13]; + __IO uint32_t PRIVDIS[3]; + __I uint32_t RESERVED2[221]; + __I uint32_t ROMSIZE; + __I uint32_t FLSIZE; + __I uint32_t RESERVED3[2]; + __I uint32_t RAM0SIZE; +} XMC_PAU_t; + +/********************************************************************************************************************* + * API PROTOTYPES + *********************************************************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @param peripheral Peripheral of type ::XMC_PAU_PERIPHERAL_t for which access needs to be enabled + * @return None + * + * \parDescription:
+ * Enable the peripheral access
+ * + * \par + * The function resets the PRIVDISx.PDISy bit to enable the access to the registers of a peripheral + * during run time. + * + * \parRelated APIs:
+ * XMC_PAU_DisablePeripheralAccess() + */ +void XMC_PAU_EnablePeripheralAccess(XMC_PAU_PERIPHERAL_t peripheral); + +/** + * @param peripheral Peripheral of type ::XMC_PAU_PERIPHERAL_t for which access needs to be disabled + * @return None + * + * \parDescription:
+ * Disable the peripheral access
+ * + * \par + * The function sets the PRIVDISx.PDISy bit to disable the access to the registers of a peripheral + * during run time. An access to a disabled or unassigned address location generates a hardfault + * exception. + * + * \parRelated APIs:
+ * XMC_PAU_EnablePeripheralAccess() + */ +void XMC_PAU_DisablePeripheralAccess(XMC_PAU_PERIPHERAL_t peripheral); + +/** + * @param peripheral Peripheral of type ::XMC_PAU_PERIPHERAL_t for which access enabled status to be checked + * @return bool "false" if peripheral access is enabled, "true" otherwise + * + * \parDescription:
+ * Checks if the peripheral access is enabled or not
+ * + * \par + * The function checks the PRIVDISx.PDISy bit to know whether the access to the registers of a peripheral + * during run time is enabled or not. + * + * \parRelated APIs:
+ * XMC_PAU_DisablePeripheralAccess(), XMC_PAU_EnablePeripheralAccess() + */ +bool XMC_PAU_IsPeripheralAccessEnabled(XMC_PAU_PERIPHERAL_t peripheral); + +/** + * @param peripheral Peripheral of type ::XMC_PAU_PERIPHERAL_t for which access needs to be disabled + * @return bool Returns "true" if peripheral is available, "false" otherwise + * + * \parDescription:
+ * Checks if a peripheral is available or not
+ * + * \par + * The function checks the AVAILx.AVAILy bit to know whether the peripheral + * is available or not for the particular device variant. + */ +bool XMC_PAU_IsPeripheralAvailable(XMC_PAU_PERIPHERAL_t peripheral); + +/** + * @return uint32_t Returns ROM size + * + * \parDescription:
+ * Gets the ROM size
+ * + * \par + * The function checks the ROMSIZE.ADDR bitfield to indicate the available size of ROM in the device in bytes. + */ +__STATIC_INLINE uint32_t XMC_PAU_GetROMSize(void) +{ + return (uint32_t)(((XMC_PAU->ROMSIZE & PAU_ROMSIZE_ADDR_Msk) >> PAU_ROMSIZE_ADDR_Pos) * 256U); +} + +/** + * @return uint32_t Returns flash size + * + * \parDescription:
+ * Gets the flash size
+ * + * \par + * The function checks the FLSIZE.ADDR bitfield to indicate the available size of FLASH in the device in Kbytes. + */ +__STATIC_INLINE uint32_t XMC_PAU_GetFlashSize(void) +{ + return (uint32_t)((((XMC_PAU->FLSIZE & PAU_FLSIZE_ADDR_Msk) >> PAU_FLSIZE_ADDR_Pos) - 1U) * 4U); +} + +/** + * @return uint32_t Returns RAM size + * + * \parDescription:
+ * Gets RAM size
+ * + * \par + * The function checks the RAM0SIZE.ADDR bitfield to indicate the available size of RAM in the device in bytes. + */ +__STATIC_INLINE uint32_t XMC_PAU_GetRAMSize(void) +{ + return (uint32_t)(((XMC_PAU->RAM0SIZE & PAU_RAM0SIZE_ADDR_Msk) >> PAU_RAM0SIZE_ADDR_Pos) * 256U); +} + +#ifdef __cplusplus +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined(PAU) */ + +#endif /* XMC_PAU_H */ + diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_posif.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_posif.h index fdf322dc..b92bdc09 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_posif.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_posif.h @@ -1,12 +1,12 @@ /** * @file xmc_posif.h - * @date 2015-10-27 + * @date 2016-03-09 * * @cond ********************************************************************************** - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -54,6 +54,10 @@ * * 2015-07-02: * - Updated XMC_POSIF_QD_GetDirection API + * + * 2016-03-09: + * - Optimization of write only registers + * * @endcond * */ @@ -558,7 +562,7 @@ void XMC_POSIF_SelectInputSource(XMC_POSIF_t *const peripheral, const XMC_POSIF_ */ __STATIC_INLINE void XMC_POSIF_Start(XMC_POSIF_t *const peripheral) { - peripheral->PRUNS |= (uint32_t)POSIF_PRUNS_SRB_Msk; + peripheral->PRUNS = (uint32_t)POSIF_PRUNS_SRB_Msk; } /** @@ -575,7 +579,7 @@ __STATIC_INLINE void XMC_POSIF_Start(XMC_POSIF_t *const peripheral) */ __STATIC_INLINE void XMC_POSIF_Stop(XMC_POSIF_t *const peripheral) { - peripheral->PRUNC |= (uint32_t)(POSIF_PRUNC_CRB_Msk | POSIF_PRUNC_CSM_Msk); + peripheral->PRUNC = (uint32_t)(POSIF_PRUNC_CRB_Msk | POSIF_PRUNC_CSM_Msk); } /** @@ -744,7 +748,7 @@ __STATIC_INLINE void XMC_POSIF_HSC_SetHallPatterns(XMC_POSIF_t *const peripheral */ __STATIC_INLINE void XMC_POSIF_HSC_UpdateHallPattern(XMC_POSIF_t *const peripheral) { - peripheral->MCMS |= (uint32_t)POSIF_MCMS_STHR_Msk; + peripheral->MCMS = (uint32_t)POSIF_MCMS_STHR_Msk; } /** @@ -976,7 +980,7 @@ __STATIC_INLINE void XMC_POSIF_DisableEvent(XMC_POSIF_t *const peripheral, const */ __STATIC_INLINE void XMC_POSIF_SetEvent(XMC_POSIF_t *const peripheral, const XMC_POSIF_IRQ_EVENT_t event) { - peripheral->SPFLG |= (uint32_t)1 << (uint8_t)event; + peripheral->SPFLG = (uint32_t)1 << (uint8_t)event; } /** @@ -993,7 +997,7 @@ __STATIC_INLINE void XMC_POSIF_SetEvent(XMC_POSIF_t *const peripheral, const XMC */ __STATIC_INLINE void XMC_POSIF_ClearEvent(XMC_POSIF_t *const peripheral, const XMC_POSIF_IRQ_EVENT_t event) { - peripheral->RPFLG |= (uint32_t)1 << (uint8_t)event; + peripheral->RPFLG = (uint32_t)1 << (uint8_t)event; } /** diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_prng.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_prng.h new file mode 100644 index 00000000..9e3020e3 --- /dev/null +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_prng.h @@ -0,0 +1,285 @@ + +/** + * @file xmc_prng.h + * @date 2015-06-20 + * + * @cond + ********************************************************************************************************************* + * XMClib v2.1.8 - XMC Peripheral Driver Library + * + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with + * Infineon Technologies AG dave@infineon.com). + ********************************************************************************************************************* + * + * Change History + * -------------- + * + * 2015-02-20: + * - Initial
+ * - Documentation updates
+ * + * 2015-06-20: + * - Removed version macros and declaration of GetDriverVersion API
+ * + * @endcond + */ + +#ifndef XMC_PRNG_H +#define XMC_PRNG_H + +/********************************************************************************************************************* + * HEADER FILES + *********************************************************************************************************************/ + +#include "xmc_common.h" + +#if defined (PRNG) + +/** + * @addtogroup XMClib XMC Peripheral Library + * @{ + */ + +/** + * @addtogroup PRNG + * @brief Pseudo Random Number Generator (PRNG) driver for XMC1000 microcontroller family + * + * The pseudo random bit generator (PRNG) provides random data with fast generation times. + * PRNG has to be initialized by the user software before use. The initialization consists + * of two basic phases: key-loading and warm-up. + * + * The PRNG low level driver provides functions to configure and initialize the PRNG hardware + * peripheral. + * @{ + */ + +/********************************************************************************************************************* + * MACROS + *********************************************************************************************************************/ + +/** + * Byte mask value for random data block size + */ +#define XMC_PRNG_RDBS_BYTE_READ_MASK (0x00FFU) + +/********************************************************************************************************************* + * ENUMS + *********************************************************************************************************************/ + +/** + * PRNG key load operation modes + */ +typedef enum XMC_PRNG_KEY_LOAD_OP_MODE { + XMC_PRNG_STRM_MODE = 0U, /**< Streaming mode (default) */ + XMC_PRNG_KLD_MODE = 1U /**< Loading mode */ +} XMC_PRNG_KEY_LOAD_OP_MODE_t; + +/** + * PRNG data block size + */ +typedef enum XMC_PRNG_DATA_BLOCK_SIZE { + XMC_PRNG_RDBS_RESET = 0U, /**< Reset state (no random data block size defined) */ + XMC_PRNG_RDBS_BYTE = 1U, /**< BYTE (8-bit) */ + XMC_PRNG_RDBS_WORD = 2U /**< WORD (16-bit) */ +} XMC_PRNG_DATA_BLOCK_SIZE_t; + +/** + * PRNG driver initialization status + */ +typedef enum XMC_PRNG_INIT_STATUS { + XMC_PRNG_NOT_INITIALIZED = 0U, /**< Reset state or Non-initialized state (Same as XMC_PRNG_RDBS_RESET) */ + XMC_PRNG_INITIALIZED = 1U /**< Initialized state */ +} XMC_PRNG_INIT_STATUS_t; + +/********************************************************************************************************************* + * DATA STRUCTURES + *********************************************************************************************************************/ + +/** + * Key words and data block size configuration values of PRNG
+ * + * The structure presents a convenient way to set/obtain the key word and data block configuration + * values of PRNG. + * The XMC_PRNG_Init() can be used to populate the structure with the key word and data block + * configuration values of the PRNG module. + */ +typedef struct XMC_PRNG_INIT +{ + uint16_t key_words[5]; /**< Keywords */ + XMC_PRNG_DATA_BLOCK_SIZE_t block_size; /**< Block size */ +} XMC_PRNG_INIT_t; + +/********************************************************************************************************************* + * API PROTOTYPES + *********************************************************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @param prng Pointer to a constant instance of ::XMC_PRNG_INIT_t, pointing to + * the initialization configuration. + * @return XMC_PRNG_INIT_STATUS_t XMC_PRNG_INITIALIZED if initialized, + * XMC_PRNG_NOT_INITIALIZED otherwise. + * + * \parDescription:
+ * Initialize the PRNG peripheral with the configured key words and block size
+ * + * \par + * The function configures block size for key loading mode, enables key loading mode, + * loads key words (80 bits) and wait till RDV is set, enables the streaming mode and + * waits for warmup phase. This function programmes the CTRL and WORD registers. + */ +XMC_PRNG_INIT_STATUS_t XMC_PRNG_Init(const XMC_PRNG_INIT_t *prng); + + + +/** + * @param block_size Block size of type ::XMC_PRNG_DATA_BLOCK_SIZE_t for read access + * @return None + * + * \parDescription:
+ * Programming Random Block Size
+ * + * \par + * The function sets the random data block size as byte or word by programming CTRL.RDBS bitfield. + * block_size = 0 for Reset state, block_size = 1 for 'byte' and block_size = 2 for 'word'. + */ +__STATIC_INLINE void XMC_PRNG_SetRandomDataBlockSize(XMC_PRNG_DATA_BLOCK_SIZE_t block_size) +{ + PRNG->CTRL = (uint16_t)((PRNG->CTRL & (uint32_t)~PRNG_CTRL_RDBS_Msk) | + ((uint32_t)block_size << (uint32_t)PRNG_CTRL_RDBS_Pos)); +} + +/** + * @return None + * + * \parDescription:
+ * Checks the validity (CHK.RDV bit) of the generated random data
+ * + * \par + * The function checks the validity (CHK.RDV bit) of the generated random data. + * In key loading mode, this value indicates if the next partial key word can be written + * to PRNG_WORD or not. + */ +__STATIC_INLINE uint16_t XMC_PRNG_CheckValidStatus(void) +{ + return (PRNG->CHK & PRNG_CHK_RDV_Msk); +} + +/** + * @return None + * + * \parDescription:
+ * Enables the PRNG key loading mode
+ * + * \par + * The function initializes the key loading by setting the bit CTRL.KLD. In this mode, Register WORD + * acts as always as a 16 bit destination register. After the complete key has been loaded, the CTRL.KLD + * must be set to '0' to prepare the following warmup phase. + * + * \parRelated APIs:
+ * XMC_PRNG_EnableStreamingMode() + */ +__STATIC_INLINE void XMC_PRNG_EnableKeyLoadingMode(void) +{ + PRNG->CTRL |= (uint16_t)PRNG_CTRL_KLD_Msk; +} + +/** + * @return None + * + * \parDescription:
+ * Enables the Streaming mode
+ * + * \par + * The function enables the streaming mode and disables the PRNG key loading mode by resetting the + * CTRL.KLD bit. + * + * \parRelated APIs:
+ * XMC_PRNG_EnableKeyLoadingMode() + */ +__STATIC_INLINE void XMC_PRNG_EnableStreamingMode(void) +{ + PRNG->CTRL &= (uint16_t)~PRNG_CTRL_KLD_Msk; +} + +/** + * @param key Key word to load into PRNG WORD register + * @return None + * + * \parDescription:
+ * Loads a partial key word to the PRNG WORD register
+ * + * \par + * The function loads partial key word to WORD registr. These partial + * words are sequentially written and loading a key word will take 16 clock + * cycles. The CHK.RDV bit is set to '0' while loading is in progress. '1' indicates + * that the next partial key word can be written to WORD register. + */ +__STATIC_INLINE void XMC_PRNG_LoadKeyWords(uint16_t key) +{ + PRNG->WORD = key; +} + +/** + * @param None + * @return uint16_t Generated random number + * + * \parDescription:
+ * Gets the generated random number
+ * + * \par + * The function gives the generated random number by returning the content of WORD + * register. Before reading the WORD register to get the generated random number it is + * required to check the bit CHK.RDV is set which indicates that the next random data block + * can be read from WORD register. After a word has been read the bit CHK.RDV is reset + * by the hardware and generation of new random bits starts. + * + * \parRelated APIs:
+ * XMC_PRNG_CheckValidStatus() + */ +__STATIC_INLINE uint16_t XMC_PRNG_GetPseudoRandomNumber(void) +{ + return PRNG->WORD; +} + +#ifdef __cplusplus +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +#endif /* #if defined (PRNG) */ + +#endif /* XMC_PRNG_H */ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_rtc.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_rtc.h index 9167974a..31627f2a 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_rtc.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_rtc.h @@ -1,12 +1,12 @@ /** * @file xmc_rtc.h - * @date 2015-10-27 + * @date 2016-05-19 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -46,6 +46,10 @@ * * 2015-06-20: * - Removed version macros and declaration of GetDriverVersion API + * + * 2016-05-19: + * - Added XMC_RTC_SetTimeStdFormat() and XMC_RTC_SetAlarmStdFormat() + * * @endcond * */ @@ -463,6 +467,23 @@ void XMC_RTC_SetTime(const XMC_RTC_TIME_t *const timeval); */ void XMC_RTC_GetTime(XMC_RTC_TIME_t *const time); +/** + * @param stdtime Pointer to a ::tm structure containing the time parameters seconds, + * minutes, hours, days, daysofweek, month, year(since 1900) and days in a + * year in standard format. + * @return None + * + * \parDescription:
+ * Sets the RTC module time value in standard format
+ * + * \par + * The function sets the time values from TIM0, TIM1 registers. + * + * \parRelated APIs:
+ * XMC_RTC_SetTime(), XMC_RTC_GetTime() + */ +void XMC_RTC_SetTimeStdFormat(const struct tm *const stdtime); + /** * @param stdtime Pointer to a constant ::tm structure containing the time parameters seconds, * minutes, hours, days, daysofweek, month, year(since 1900) and days in a @@ -519,6 +540,23 @@ void XMC_RTC_SetAlarm(const XMC_RTC_ALARM_t *const alarm); */ void XMC_RTC_GetAlarm(XMC_RTC_ALARM_t *const alarm); +/** + * @param stdtime Pointer to a ::tm structure containing the time parameters alarm seconds, + * alarm minutes, alarm hours, alarm days, alarm daysofweek, alarm month, + * alarm year(since 1900) and alarm days in a year in standard format. + * @return None + * + * \parDescription:
+ * Sets the RTC module alarm time value in standard format
+ * + * \par + * The function sets the alarm time values from ATIM0, ATIM1 registers. + * + * \parRelated APIs:
+ * XMC_RTC_SetAlarm(), XMC_RTC_GetAlarm() + */ +void XMC_RTC_SetAlarmStdFormat(const struct tm *const stdtime); + /** * @param stdtime Pointer to a constant ::tm structure containing the time parameters alarm seconds, * alarm minutes, alarm hours, alarm days, alarm daysofweek, alarm month, diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_scu.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_scu.h index 31e5cc1b..89871243 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_scu.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_scu.h @@ -1,12 +1,12 @@ /** * @file xmc_scu.h - * @date 2015-10-27 + * @date 2016-03-09 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -49,6 +49,12 @@ * XMC_SCU_INTERRUPT_EnableEvent, XMC_SCU_INTERRUPT_DisableEvent, * XMC_SCU_INTERRUPT_TriggerEvent, XMC_SCU_INTERUPT_GetEventStatus, * XMC_SCU_INTERUPT_ClearEventStatus + * + * 2015-11-30: + * - Documentation improved
+ * + * 2016-03-09: + * - Optimization of write only registers * * @endcond * @@ -176,7 +182,7 @@ typedef enum XMC_SCU_STATUS ********************************************************************************************************************/ /** - * Function pointer type used for registering callback functions on SCU event occurence. + * Function pointer type used for registering callback functions on SCU event occurrence. */ typedef void (*XMC_SCU_INTERRUPT_EVENT_HANDLER_t)(void); @@ -309,7 +315,7 @@ void XMC_SCU_INTERRUPT_EnableEvent(const XMC_SCU_INTERRUPT_EVENT_t event); * @return None * * \parDescription
- * Disables generation of interrupt on occurence of the input event.\n\n + * Disables generation of interrupt on occurrence of the input event.\n\n * The events are disabled by resetting the respective bit fields in the SRMSK register. \n * \parRelated APIs:
* NVIC_DisableIRQ(), XMC_SCU_INTERRUPT_EnableEvent()\n\n\n @@ -400,7 +406,7 @@ __STATIC_INLINE uint32_t XMC_SCU_RESET_GetDeviceResetReason(void) __STATIC_INLINE void XMC_SCU_RESET_ClearDeviceResetReason(void) { /* Clear RSTSTAT.RSTSTAT bitfield */ - SCU_RESET->RSTCLR |= (uint32_t)SCU_RESET_RSTCLR_RSCLR_Msk; + SCU_RESET->RSTCLR = (uint32_t)SCU_RESET_RSTCLR_RSCLR_Msk; } /** @@ -548,7 +554,7 @@ __STATIC_INLINE uint32_t XMC_SCU_GetMirrorStatus(void) * \b Range: \a XMC_SCU_STATUS_OK if the event handler is successfully configured.\n * \a XMC_SCU_STATUS_ERROR if the input event is invalid.\n * \parDescription
- * Assigns the event handler function to be executed on occurence of the selected event.\n\n + * Assigns the event handler function to be executed on occurrence of the selected event.\n\n * If the input event is valid, the handler function will be assigned to a table to be executed * when the interrupt is generated and the event status is set in the event status register. By using this API, * polling for a particular event can be avoided. This way the CPU utilization will be optimized. Multiple SCU events diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_sdmmc.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_sdmmc.h index 7da7dd00..e8a3683a 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_sdmmc.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_sdmmc.h @@ -1,13 +1,13 @@ /** * @file xmc_sdmmc.h - * @date 2015-10-27 + * @date 2016-07-11 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -44,6 +44,23 @@ * 2015-06-20: * - Removed version macros and declaration of GetDriverVersion API
* + * 2016-01-16: + * - Added the following APIs to the XMC_SDMMC low level driver
+ * 1) XMC_SDMMC_EnableDelayCmdDatLines
+ * 2) XMC_SDMMC_DisableDelayCmdDatLines
+ * 3) XMC_SDMMC_SetDelay
+ * 4) XMC_SDMMC_EnableHighSpeed
+ * 5) XMC_SDMMC_DisableHighSpeed
+ * + * 2016-04-07: + * - Added XMC_SDMMC_COMMAND_RESPONSE_t
+ * + * 2016-07-11: + * - Adjust masks for the following functions:
+ * 1) XMC_SDMMC_SetBusVoltage
+ * 2) XMC_SDMMC_SetDataLineTimeout
+ * 3) XMC_SDMMC_SDClockFreqSelect
+ * * @endcond */ @@ -178,6 +195,14 @@ ((d == XMC_SDMMC_DATA_TRANSFER_HOST_TO_CARD) ||\ (d == XMC_SDMMC_DATA_TRANSFER_CARD_TO_HOST)) +/* + * Min and max number of delay elements
+ * + * This macro is used in the LLD for assertion checks (XMC_ASSERT). + */ +#define XMC_SDMMC_MIN_DELAY_ELEMENTS (0U) +#define XMC_SDMMC_MAX_DELAY_ELEMENTS (15U) + /******************************************************************************* * ENUMS *******************************************************************************/ @@ -291,6 +316,17 @@ typedef enum XMC_SDMMC_RESPONSE_TYPE_R7 /**< Response type: R7 */ } XMC_SDMMC_RESPONSE_TYPE_t; +/** +* Command response selection +*/ +typedef enum XMC_SDMMC_COMMAND_RESPONSE +{ + XMC_SDMMC_COMMAND_RESPONSE_NONE = 0, /**< No Response */ + XMC_SDMMC_COMMAND_RESPONSE_LONG = 1, /**< Response length 136 */ + XMC_SDMMC_COMMAND_RESPONSE_SHORT = 2, /**< Response length 48 */ + XMC_SDMMC_COMMAND_RESPONSE_SHORT_BUSY = 3, /**< Response length 48 check Busy after response */ +} XMC_SDMMC_COMMAND_RESPONSE_t; + /** * Types of SDMMC commands */ @@ -474,14 +510,14 @@ typedef union { struct { - uint16_t response_type_sel : 2; /**< Response type select */ - uint16_t : 1; /**< Reserved bit */ + uint16_t response_type_sel : 2; /**< Response type select ::XMC_SDMMC_COMMAND_RESPONSE_t */ + uint16_t : 1; uint16_t crc_check_en : 1; /**< Command CRC check enable */ uint16_t index_check_en : 1; /**< Command index check enable */ uint16_t dat_present_sel : 1; /**< Data present select */ - uint16_t cmd_type : 2; /**< Command type */ + uint16_t cmd_type : 2; /**< Command type ::XMC_SDMMC_COMMAND_TYPE_t */ uint16_t cmd_index : 6; /**< Command index */ - uint16_t : 2; /**< Reserved bits */ + uint16_t : 2; }; uint16_t cmd; } XMC_SDMMC_COMMAND_t; @@ -1366,8 +1402,8 @@ __STATIC_INLINE void XMC_SDMMC_SDClockFreqSelect(XMC_SDMMC_t *const sdmmc, XMC_S XMC_ASSERT("XMC_SDMMC_SDClockFreqSelect: Invalid module pointer", XMC_SDMMC_CHECK_MODULE_PTR(sdmmc)); XMC_ASSERT("XMC_SDMMC_SDClockFreqSelect: Invalid clock frequency selection", XMC_SDMMC_CHECK_SDCLK_FREQ(clk)); - sdmmc->CLOCK_CTRL |= (uint16_t)((uint32_t)SDMMC_CLOCK_CTRL_SDCLK_FREQ_SEL_Msk & - (uint32_t)((uint32_t)clk << SDMMC_CLOCK_CTRL_SDCLK_FREQ_SEL_Pos)); + sdmmc->CLOCK_CTRL = (uint16_t)((sdmmc->CLOCK_CTRL & (uint32_t)~SDMMC_CLOCK_CTRL_SDCLK_FREQ_SEL_Msk) | + (uint32_t)(clk << SDMMC_CLOCK_CTRL_SDCLK_FREQ_SEL_Pos)); } /** @@ -1388,7 +1424,8 @@ __STATIC_INLINE void XMC_SDMMC_SetBusVoltage(XMC_SDMMC_t *const sdmmc, XMC_SDMMC XMC_ASSERT("XMC_SDMMC_SetBusVoltage: Invalid module pointer", XMC_SDMMC_CHECK_MODULE_PTR(sdmmc)); XMC_ASSERT("XMC_SDMMC_SetBusVoltage: Invalid bus voltage", XMC_SDMMC_CHECK_BUS_VOLTAGE(bus_voltage)); - sdmmc->POWER_CTRL |= (uint8_t)((uint32_t)bus_voltage << SDMMC_POWER_CTRL_SD_BUS_VOLTAGE_SEL_Pos); + sdmmc->POWER_CTRL = (uint8_t)((sdmmc->POWER_CTRL & (uint32_t)~SDMMC_POWER_CTRL_SD_BUS_VOLTAGE_SEL_Msk) | + (uint32_t)(bus_voltage << SDMMC_POWER_CTRL_SD_BUS_VOLTAGE_SEL_Pos)); } /** @@ -1409,8 +1446,8 @@ __STATIC_INLINE void XMC_SDMMC_SetDataLineTimeout(XMC_SDMMC_t *const sdmmc, XMC_ XMC_ASSERT("XMC_SDMMC_SetDataLineTimeout: Invalid module pointer", XMC_SDMMC_CHECK_MODULE_PTR(sdmmc)); XMC_ASSERT("XMC_SDMMC_SetDataLineTimeout: Invalid timeout", XMC_SDMMC_CHECK_DAT_TIMEOUT_COUNTER(timeout)); - sdmmc->TIMEOUT_CTRL |= (uint8_t)(((uint32_t)timeout << SDMMC_TIMEOUT_CTRL_DAT_TIMEOUT_CNT_VAL_Pos) & - (uint32_t)SDMMC_TIMEOUT_CTRL_DAT_TIMEOUT_CNT_VAL_Msk); + sdmmc->TIMEOUT_CTRL = (uint8_t)((sdmmc->TIMEOUT_CTRL & (uint32_t)~SDMMC_TIMEOUT_CTRL_DAT_TIMEOUT_CNT_VAL_Msk) | + (uint32_t)(timeout << SDMMC_TIMEOUT_CTRL_DAT_TIMEOUT_CNT_VAL_Pos)); } /** @@ -1457,6 +1494,94 @@ __STATIC_INLINE void XMC_SDMMC_SetDataTransferDirection(XMC_SDMMC_t *const sdmmc (uint16_t)((uint16_t)dir << SDMMC_TRANSFER_MODE_TX_DIR_SELECT_Pos)); } +/** + * @param None + * @return None + * + * \parDescription:
+ * Enable delay on the command/data out lines
+ * + * \par + * Use the function to enable delay on the command/data out lines. Invoke this function + * before selecting the number of delay elements. + */ +__STATIC_INLINE void XMC_SDMMC_EnableDelayCmdDatLines(void) +{ + SCU_GENERAL->SDMMCDEL |= (uint32_t)SCU_GENERAL_SDMMCDEL_TAPEN_Msk; +} + +/** + * @param None + * @return None + * + * \parDescription:
+ * Disable delay on the command/data out lines
+ * + * \par + * Use the function to disable delay on the command/data out lines. + */ +__STATIC_INLINE void XMC_SDMMC_DisableDelayCmdDatLines(void) +{ + SCU_GENERAL->SDMMCDEL &= (uint32_t)~SCU_GENERAL_SDMMCDEL_TAPEN_Msk; +} + +/** + * @param tapdel Number of delay elements to select + * @return None + * + * \parDescription:
+ * Set number of delay elements on the command/data out lines
+ * + * \par + * Use the function to set the number of delay elements on the command/data out lines. + * The function writes the delay value to the SDMMC delay control register (SDMMCDEL) + * within the realm of the SCU peripheral. A delay of tapdel + 1 is considered as the + * final selected number of delay elements. + */ +__STATIC_INLINE void XMC_SDMMC_SetDelay(uint8_t tapdel) +{ + SCU_GENERAL->SDMMCDEL = (uint32_t)((SCU_GENERAL->SDMMCDEL & (uint32_t)~SCU_GENERAL_SDMMCDEL_TAPDEL_Msk) | + (uint32_t)(tapdel << SCU_GENERAL_SDMMCDEL_TAPDEL_Pos)); +} + +/** + * @param None + * @return None + * + * \parDescription:
+ * High speed enable
+ * + * \par + * Use the function to enable high speed operation. The default is a normal speed operation. + * Once enabled, the host controller outputs command and data lines at the rising edge of the + * SD clock (up to 50 MHz for SD). + */ +__STATIC_INLINE void XMC_SDMMC_EnableHighSpeed(XMC_SDMMC_t *const sdmmc) +{ + XMC_ASSERT("XMC_SDMMC_EnableHighSpeed: Invalid module pointer", XMC_SDMMC_CHECK_MODULE_PTR(sdmmc)); + + sdmmc->HOST_CTRL |= (uint8_t)SDMMC_HOST_CTRL_HIGH_SPEED_EN_Msk; +} + +/** + * @param None + * @return None + * + * \parDescription:
+ * High speed disable
+ * + * \par + * Use the function to disable high speed operation. The host controller will switch back + * to a normal speed mode. In this mode, the host controller outputs command and data lines + * at 25 MHz for SD. + */ +__STATIC_INLINE void XMC_SDMMC_DisableHighSpeed(XMC_SDMMC_t *const sdmmc) +{ + XMC_ASSERT("XMC_SDMMC_DisableHighSpeed: Invalid module pointer", XMC_SDMMC_CHECK_MODULE_PTR(sdmmc)); + + sdmmc->HOST_CTRL &= (uint8_t)~SDMMC_HOST_CTRL_HIGH_SPEED_EN_Msk; +} + #ifdef __cplusplus } #endif diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_spi.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_spi.h index 1be71951..32966d10 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_spi.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_spi.h @@ -1,12 +1,12 @@ /** * @file xmc_spi.h - * @date 2015-10-27 + * @date 2016-05-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -62,6 +62,13 @@ * * 2015-09-08: * - Adding API for configuring the receiving clock phase in the slave:XMC_SPI_CH_DataLatchedInTrailingEdge() and XMC_SPI_CH_DataLatchedInLeadingEdge()
+ * + * 2016-04-10: + * - Added an API for configuring the transmit mode:XMC_SPI_CH_SetTransmitMode()
+ * + * 2016-05-20: + * - Added XMC_SPI_CH_EnableDataTransmission() and XMC_SPI_CH_DisableDataTransmission() + * * @endcond * */ @@ -438,6 +445,27 @@ void XMC_SPI_CH_EnableSlaveSelect(XMC_USIC_CH_t *const channel, const XMC_SPI_CH */ void XMC_SPI_CH_DisableSlaveSelect(XMC_USIC_CH_t *const channel); +/** + * @param channel A constant pointer to XMC_USIC_CH_t, pointing to the USIC channel base address. + * @param mode Communication mode of the SPI, based on this mode TCI(Transmit control information)is updated.\n + * Refer @ref XMC_SPI_CH_MODE_t for valid values. + * + * @return None + * + * \parDescription:
+ * In Dual and Quad modes, hardware port control(CCR.HPCEN) mode is enabled. \n\n + * By enabling this the direction of the data pin is updated by hardware itself. Before transmitting the data set the + * mode to ensure the proper communication. + * + * \parRelated APIs:
+ * XMC_SPI_CH_Transmit() + */ +__STATIC_INLINE void XMC_SPI_CH_SetTransmitMode(XMC_USIC_CH_t *const channel, const XMC_SPI_CH_MODE_t mode) +{ + channel->CCR = (channel->CCR & (uint32_t)(~USIC_CH_CCR_HPCEN_Msk)) | + (((uint32_t) mode << USIC_CH_CCR_HPCEN_Pos) & (uint32_t)USIC_CH_CCR_HPCEN_Msk); +} + /** * @param channel A constant pointer to XMC_USIC_CH_t, pointing to the USIC channel base address. * @param data Data to be transmitted @@ -1170,6 +1198,72 @@ __STATIC_INLINE void XMC_SPI_CH_ConfigExternalInputSignalToBRG(XMC_USIC_CH_t *co XMC_USIC_CH_ConfigExternalInputSignalToBRG(channel,pdiv,2U,combination_mode); } +/** + * @param channel A constant pointer to XMC_USIC_CH_t, pointing to the USIC channel base address. + * + * @return None + * + * \parDescription
+ * The SELOx lines (with x = 1-7) can be used as addresses for an external address + * decoder to increase the number of external slave devices. + */ +__STATIC_INLINE void XMC_SPI_CH_EnableSlaveSelectCodedMode(XMC_USIC_CH_t *const channel) +{ + /* Configuration of Protocol Control Register */ + channel->PCR_SSCMode = (uint32_t)(channel->PCR_SSCMode & (~USIC_CH_PCR_SSCMode_SELCTR_Msk)); +} + +/** + * @param channel A constant pointer to XMC_USIC_CH_t, pointing to the USIC channel base address. + * + * @return None + * + * \parDescription
+ * Each SELOx line (with x = 0-7) can be directly connected to an external slave device. + */ +__STATIC_INLINE void XMC_SPI_CH_DisableSlaveSelectCodedMode(XMC_USIC_CH_t *const channel) +{ + /* Configuration of Protocol Control Register */ + channel->PCR_SSCMode |= (uint32_t)USIC_CH_PCR_SSCMode_SELCTR_Msk; +} + +/** + * @param channel Constant pointer to USIC channel handle of type @ref XMC_USIC_CH_t \n + * \b Range: @ref XMC_SPI0_CH0, @ref XMC_SPI0_CH1,@ref XMC_SPI1_CH0,@ref XMC_SPI1_CH1,@ref XMC_SPI2_CH0,@ref XMC_SPI2_CH1 @note Availability of SPI1 and SPI2 depends on device selection + * @return None + * + * \parDescription
+ * Enable data transmission.\n\n + * Use this function in combination with XMC_SPI_CH_DisableDataTransmission() to fill the FIFO and send the FIFO content without gaps in the transmission. + * FIFO is filled using XMC_USIC_CH_TXFIFO_PutData(). + * @note If you need more control over the start of transmission use XMC_USIC_CH_SetStartTransmisionMode() + * + * \parRelated APIs:
+ * XMC_SPI_CH_DisableDataTransmission()\n\n\n + */ +__STATIC_INLINE void XMC_SPI_CH_EnableDataTransmission(XMC_USIC_CH_t *const channel) +{ + XMC_USIC_CH_SetStartTransmisionMode(channel, XMC_USIC_CH_START_TRANSMISION_ON_TDV); +} + +/** + * @param channel Constant pointer to USIC channel handle of type @ref XMC_USIC_CH_t \n + * \b Range: @ref XMC_SPI0_CH0, @ref XMC_SPI0_CH1,@ref XMC_SPI1_CH0,@ref XMC_SPI1_CH1,@ref XMC_SPI2_CH0,@ref XMC_SPI2_CH1 @note Availability of SPI1 and SPI2 depends on device selection + * @return None + * + * \parDescription
+ * Disable data transmission.\n\n + * Use this function in combination with XMC_SPI_CH_EnableDataTransmission() to fill the FIFO and send the FIFO content without gaps in the transmission. + * FIFO is filled using XMC_USIC_CH_TXFIFO_PutData(). + * + * \parRelated APIs:
+ * XMC_SPI_CH_EnableDataTransmission()\n\n\n + */ +__STATIC_INLINE void XMC_SPI_CH_DisableDataTransmission(XMC_USIC_CH_t *const channel) +{ + XMC_USIC_CH_SetStartTransmisionMode(channel, XMC_USIC_CH_START_TRANSMISION_DISABLED); +} + #ifdef __cplusplus } #endif diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_uart.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_uart.h index 2b6fc874..10ab45de 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_uart.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_uart.h @@ -1,12 +1,12 @@ /** * @file xmc_uart.h - * @date 2015-10-27 + * @date 2016-05-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -50,6 +50,10 @@ * - Modified XMC_UART_CH_SetInputSource() for avoiding complete DXCR register overwriting.
* - Modified XMC_UART_CH_EVENT_t enum for supporting XMC_UART_CH_EnableEvent() and XMC_UART_CH_DisableEvent() * for supporting multiple events configuration
+ * + * 2016-05-20: + * - Added XMC_UART_CH_EnableDataTransmission() and XMC_UART_CH_DisableDataTransmission() + * * @endcond * */ @@ -754,6 +758,43 @@ __STATIC_INLINE void XMC_UART_CH_SetInputSamplingFreq(XMC_USIC_CH_t *const chann XMC_USIC_CH_SetInputSamplingFreq(channel, (XMC_USIC_CH_INPUT_t)input, (XMC_USIC_CH_INPUT_SAMPLING_FREQ_t)sampling_freq); } +/** + * @param channel Constant pointer to USIC channel handle of type @ref XMC_USIC_CH_t \n + * \b Range: @ref XMC_UART0_CH0, @ref XMC_UART0_CH1,@ref XMC_UART1_CH0,@ref XMC_UART1_CH1,@ref XMC_UART2_CH0,@ref XMC_UART2_CH1 @note Availability of UART1 and UART2 depends on device selection + * @return None + * + * \parDescription
+ * Enable data transmission.\n\n + * Use this function in combination with XMC_UART_CH_DisableDataTransmission() to fill the FIFO and send the FIFO content without gaps in the transmission. + * FIFO is filled using XMC_USIC_CH_TXFIFO_PutData(). + * @note If you need more control over the start of transmission use XMC_USIC_CH_SetStartTransmisionMode() + * + * \parRelated APIs:
+ * XMC_UART_CH_DisableDataTransmission()\n\n\n + */ +__STATIC_INLINE void XMC_UART_CH_EnableDataTransmission(XMC_USIC_CH_t *const channel) +{ + XMC_USIC_CH_SetStartTransmisionMode(channel, XMC_USIC_CH_START_TRANSMISION_ON_TDV); +} + +/** + * @param channel Constant pointer to USIC channel handle of type @ref XMC_USIC_CH_t \n + * \b Range: @ref XMC_UART0_CH0, @ref XMC_UART0_CH1,@ref XMC_UART1_CH0,@ref XMC_UART1_CH1,@ref XMC_UART2_CH0,@ref XMC_UART2_CH1 @note Availability of UART1 and UART2 depends on device selection + * @return None + * + * \parDescription
+ * Disable data transmission.\n\n + * Use this function in combination with XMC_UART_CH_EnableDataTransmission() to fill the FIFO and send the FIFO content without gaps in the transmission. + * FIFO is filled using XMC_USIC_CH_TXFIFO_PutData(). + * + * \parRelated APIs:
+ * XMC_UART_CH_EnableDataTransmission()\n\n\n + */ +__STATIC_INLINE void XMC_UART_CH_DisableDataTransmission(XMC_USIC_CH_t *const channel) +{ + XMC_USIC_CH_SetStartTransmisionMode(channel, XMC_USIC_CH_START_TRANSMISION_DISABLED); +} + #ifdef __cplusplus } #endif diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usbd.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usbd.h index 90da62b0..cf54ac09 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usbd.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usbd.h @@ -1,11 +1,11 @@ /** * @file xmc_usbd.h - * @date 2015-10-27 + * @date 2015-06-20 * ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usbd_regs.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usbd_regs.h index 55db5d09..4b0525e2 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usbd_regs.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usbd_regs.h @@ -33,13 +33,13 @@ /* * @file xmc_usbd_regs.h - * @date 2015-10-27 + * @date 2015-02-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usbh.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usbh.h new file mode 100644 index 00000000..9254edab --- /dev/null +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usbh.h @@ -0,0 +1,416 @@ +/** + * @file xmc_usbh.h + * @date 2016-06-30 + * + ********************************************************************************************************************* + * XMClib v2.1.8 - XMC Peripheral Driver Library + * + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with + * Infineon Technologies AG dave@infineon.com). + ********************************************************************************************************************* + * + * Change History + * -------------- + * + * 2016-06-30: + * - Initial Version.
+ * 2016-09-01: + * - Removed Keil specific inclusions and macros
+ * + * @endcond + * + */ + +#ifndef XMC_USBH_H +#define XMC_USBH_H + +#include +#include "xmc_common.h" +#include "xmc_scu.h" +#include "xmc_gpio.h" + +#if((UC_SERIES == XMC45) || (UC_SERIES == XMC44) || (UC_SERIES == XMC43) || (UC_SERIES == XMC47) || (UC_SERIES == XMC48) || defined(DOXYGEN)) +/** + * @addtogroup XMClib XMC Peripheral Library + * @{ + */ + +/** + * @addtogroup USBH + * @brief Universal Serial Bus Host (USBH) driver for the XMC4000 microcontroller family. + * + * The USBH is the host mode device driver for the USB0 hardware module on XMC4000 family of microcontrollers. + * The USB0 module can be used to establish a USB interface between outside world and XMC4000 family of controllers. + * The USB module includes the following features in host mode: + * -# Complies with the USB 2.0 Specification. + * -# Supports up to 14 bidirectional pipes, including control pipe 0. + * -# Supports SOFs in Full-Speed modes. + * -# Supports clock gating for power saving. + * -# Supports FIFO mode data transaction. + * + * The below figure shows the overview of USB0 module in XMC4 microntroller. + * @image html USB_module_overview.png + * @image latex ../images/USB_module_overview.png + * + * + * The USBH device driver supports the following features:\n + * -# Initialize/Uninitialize the USB0 module on XMC4000 device. + * -# Control VBUS state. + * -# Reset USB port. + * -# Set the USB device address. + * -# Allocate pipe for new endpoint communication. + * -# Modify an existing pipe. + * -# Transfer data on selected pipe. + * -# Abort ongoing data transaction. + * -# Handle multi packet data transaction by updating toggle information. + * + * The USBH device driver expects registration of callback functions ::XMC_USBH_SignalPortEvent_t and ::XMC_USBH_SignalPipeEvent_t to be executed + * when there is port event interrupt and pipe event interrupt respectively.\n + * The USBH driver is CMSIS API compatible. Please use Driver_USBH0 to access the USBH API.\n + * For example, to initialize the USB host controller, use Driver_USBH0.Initialize().\n + * + * @{ + */ + +/********************************************************************************************************************** + * MACROS + *********************************************************************************************************************/ +/*Drive VBUS*/ +#define XMC_USB_DRIVE_PORT1 P3_2 /**< Default port(PORT3, pin 2) used to enable VBUS voltage regulator on the board */ +#define XMC_USB_DRIVE_PORT2 P0_1 /**< Alternate port that can be used to enable VBUS voltage regulator(PORT0, pin 1) */ + +#ifndef USBH0_MAX_PIPE_NUM +#define USBH0_MAX_PIPE_NUM (14U) /**< Representation of number of pipes available */ +#endif +#if (USBH0_MAX_PIPE_NUM > 14U) +#error Too many Pipes, maximum Pipes that this driver supports is 14 !!! +#endif + +#define XMC_USBH_CLOCK_GATING_ENABLE 1 /**< Used to enable clock gating when the driver is powered down*/ +#define XMC_USBH_CLOCK_GATING_DISABLE 0 /**< Used to disable clock gating when the driver is fully powered*/ + +#define USB_CH_HCCHARx_MPS(x) (((uint32_t) x ) & (uint32_t)USB_CH_HCCHAR_MPS_Msk) /**< Masks maximum packet size information from the HCCHAR register value provided as input */ +#define USB_CH_HCCHARx_EPNUM(x) (((uint32_t) x << USB_CH_HCCHAR_EPNum_Pos) & (uint32_t)USB_CH_HCCHAR_EPNum_Msk) /**< Shifts the value to the position of endpoint number(EPNum) in the HCCHAR register*/ +#define USB_CH_HCCHARx_EPTYPE(x) (((uint32_t) x << USB_CH_HCCHAR_EPType_Pos) & (uint32_t)USB_CH_HCCHAR_EPType_Msk) /**< Shifts the value to the position of endpoint type(EPType) in the HCCHAR register*/ +#define USB_CH_HCCHARx_MCEC(x) (((uint32_t) x << USB_CH_HCCHAR_MC_EC_Pos) & (uint32_t)USB_CH_HCCHAR_MC_EC_Msk) /**< Shifts the value to the position of multi-count(MC_EC) field in the HCCHAR register*/ +#define USB_CH_HCCHARx_DEVADDR(x) (((uint32_t) x << USB_CH_HCCHAR_DevAddr_Pos) & (uint32_t)USB_CH_HCCHAR_DevAddr_Msk) /**< Shifts the value to the position of endpoint type(EPType) in the HCCHAR register*/ +#define USB_CH_HCCHARx_EPDIR(x) (((uint32_t) x << USB_CH_HCCHAR_EPDir_Pos) & (uint32_t)USB_CH_HCCHAR_EPDir_Msk) /**< Shifts the value to the position of endpoint direction(EPDir) in the HCCHAR register*/ +#define USB_CH_HCCHAR_LSDEV_Msk (((uint32_t) 0x1 << 15U) & 0x1U) +#define USB_CH_HCTSIZx_DPID(x) (((uint32_t) x << USB_CH_HCTSIZ_BUFFERMODE_Pid_Pos) & (uint32_t)USB_CH_HCTSIZ_BUFFERMODE_Pid_Msk) /**< Shifts the value to the position of packet ID (PID) in the HCTSIZ register*/ +#define USB_CH_HCTSIZx_DPID_DATA0 (USB_CH_HCTSIZx_DPID(0U)) /**< Represents DATA toggle DATA0 as in HCTSIZ register*/ +#define USB_CH_HCTSIZx_DPID_DATA2 (USB_CH_HCTSIZx_DPID(1U)) /**< Represents DATA toggle DATA2 as in HCTSIZ register*/ +#define USB_CH_HCTSIZx_DPID_DATA1 (USB_CH_HCTSIZx_DPID(2U)) /**< Represents DATA toggle DATA1 as in HCTSIZ register*/ +#define USB_CH_HCTSIZx_DPID_MDATA (USB_CH_HCTSIZx_DPID(3U)) /**< Represents DATA toggle MDATA as in HCTSIZ register*/ +#define USB_CH_HCTSIZx_DPID_SETUP (USB_CH_HCTSIZx_DPID(3U)) /**< Represents SETUP token as in HCTSIZ register*/ +#define USB_GRXSTSR_HOSTMODE_PktSts_IN_DATA_PKT 0x2 /**< Represents IN data token as in receive status pop register(GRXSTSP)*/ +#define USB_GRXSTSR_HOSTMODE_PktSts_IN_TRSF_CPL 0x3 /**< Represents paket status information as in receive status pop register(GRXSTSP)*/ + + +#define USB_CH_HCFG_FSLSSUP(x) (((uint32_t) x << USB_HCFG_FSLSSupp_Pos) & USB_HCFG_FSLSSupp_Msk) /**< Provides register value to update USB full speed related mask FLSSupp of register HCFG*/ +#define USB_CH_HCFG_FSLSPCS(x) (((uint32_t) x ) & USB_HCFG_FSLSPclkSel_Msk) /**< Provides register value to update PHY clock selection in register HCFG*/ + +#define USB_CH_HCINTx_ALL (USB_CH_HCINTMSK_XferComplMsk_Msk | \ + USB_CH_HCINTMSK_ChHltdMsk_Msk | \ + USB_CH_HCINTMSK_StallMsk_Msk | \ + USB_CH_HCINTMSK_NakMsk_Msk | \ + USB_CH_HCINTMSK_AckMsk_Msk | \ + USB_CH_HCINTMSK_XactErrMsk_Msk | \ + USB_CH_HCINTMSK_BblErrMsk_Msk | \ + USB_CH_HCINTMSK_FrmOvrunMsk_Msk | \ + USB_CH_HCINTMSK_DataTglErrMsk_Msk) /**< Mask for selecting all channel related events*/ + +#define USB_CH_HCINTx_ERRORS (USB_CH_HCINTMSK_XactErrMsk_Msk | \ + USB_CH_HCINTMSK_BblErrMsk_Msk | \ + USB_CH_HCINTMSK_FrmOvrunMsk_Msk | \ + USB_CH_HCINTMSK_DataTglErrMsk_Msk) /**< Mask for selecting all channel error related events*/ +/*Macro to find pipe index using handle*/ +#define USBH_PIPE_GET_INDEX(handle) (((uint32_t)handle - (uint32_t)USB0_CH0_BASE)/(0x20U)) /**< Macro provides index of the USB channel based on its base address*/ + +#define XMC_USBH_API_VERSION ((uint16_t)((uint16_t)XMC_LIB_MAJOR_VERSION << 8U) |XMC_LIB_MINOR_VERSION) /**< USBH low level driver API version */ + +/* General return codes */ +#define XMC_USBH_DRIVER_OK 0 /**< Operation succeeded */ +#define XMC_USBH_DRIVER_ERROR -1 /**< Unspecified error */ +#define XMC_USBH_DRIVER_ERROR_BUSY -2 /**< Driver is busy*/ +#define XMC_USBH_DRIVER_ERROR_TIMEOUT -3 /**< Timeout occurred */ +#define XMC_USBH_DRIVER_ERROR_UNSUPPORTED -4 /**< Operation not supported*/ +#define XMC_USBH_DRIVER_ERROR_PARAMETER -5 /**< Parameter error*/ +#define XMC_USBH_DRIVER_ERROR_SPECIFIC -6 /**< Start of driver specific errors*/ + +/* USB Speed */ +#define XMC_USBH_SPEED_LOW 0U /**< Low-speed USB*/ +#define XMC_USBH_SPEED_FULL 1U /**< Full-speed USB*/ +#define XMC_USBH_SPEED_HIGH 2U /**< High-speed USB*/ + +/* USB Endpoint Type */ +#define XMC_USBH_ENDPOINT_CONTROL 0 /**< Control Endpoint*/ +#define XMC_USBH_ENDPOINT_ISOCHRONOUS 1 /**< Isochronous Endpoint*/ +#define XMC_USBH_ENDPOINT_BULK 2 /**< Bulk Endpoint*/ +#define XMC_USBH_ENDPOINT_INTERRUPT 3 /**< Interrupt Endpoint*/ + +#define XMC_USBH_SignalEndpointEvent_t XMC_USBH_SignalPipeEvent_t /**< Legacy name for the pipe event handler*/ + +/****** USB Host Packet Information *****/ +#define XMC_USBH_PACKET_TOKEN_Pos 0 /**< Packet token position*/ +#define XMC_USBH_PACKET_TOKEN_Msk (0x0FUL << XMC_USBH_PACKET_TOKEN_Pos) /**< Packet token mask*/ +#define XMC_USBH_PACKET_SETUP (0x01UL << XMC_USBH_PACKET_TOKEN_Pos) /**< SETUP Packet*/ +#define XMC_USBH_PACKET_OUT (0x02UL << XMC_USBH_PACKET_TOKEN_Pos) /**< OUT Packet*/ +#define XMC_USBH_PACKET_IN (0x03UL << XMC_USBH_PACKET_TOKEN_Pos) /**< IN Packet*/ +#define XMC_USBH_PACKET_PING (0x04UL << XMC_USBH_PACKET_TOKEN_Pos) /**< PING Packet*/ + +#define XMC_USBH_PACKET_DATA_Pos 4 /**< Packet data PID position*/ +#define XMC_USBH_PACKET_DATA_Msk (0x0FUL << XMC_USBH_PACKET_DATA_Pos) /**< Packet data PID mask*/ +#define XMC_USBH_PACKET_DATA0 (0x01UL << XMC_USBH_PACKET_DATA_Pos) /**< DATA0 PID */ +#define XMC_USBH_PACKET_DATA1 (0x02UL << XMC_USBH_PACKET_DATA_Pos) /**< DATA1 PID */ + +#define XMC_USBH_PACKET_SPLIT_Pos 8 +#define XMC_USBH_PACKET_SPLIT_Msk (0x0FUL << XMC_USBH_PACKET_SPLIT_Pos) +#define XMC_USBH_PACKET_SSPLIT (0x08UL << XMC_USBH_PACKET_SPLIT_Pos) /**< SSPLIT Packet */ +#define XMC_USBH_PACKET_SSPLIT_S (0x09UL << XMC_USBH_PACKET_SPLIT_Pos) /**< SSPLIT Packet: Data Start */ +#define XMC_USBH_PACKET_SSPLIT_E (0x0AUL << XMC_USBH_PACKET_SPLIT_Pos) /**< SSPLIT Packet: Data End */ +#define XMC_USBH_PACKET_SSPLIT_S_E (0x0BUL << XMC_USBH_PACKET_SPLIT_Pos) /**< SSPLIT Packet: Data All */ +#define XMC_USBH_PACKET_CSPLIT (0x0CUL << XMC_USBH_PACKET_SPLIT_Pos) /**< CSPLIT Packet */ + +#define XMC_USBH_PACKET_PRE (1UL << 12) /**< PRE Token */ + + +/****** USB Host Port Event *****/ +#define XMC_USBH_EVENT_CONNECT (1UL << 0) /**< USB Device Connected to Port */ +#define XMC_USBH_EVENT_DISCONNECT (1UL << 1) /**< USB Device Disconnected from Port */ +#define XMC_USBH_EVENT_OVERCURRENT (1UL << 2) /**< USB Device caused Overcurrent */ +#define XMC_USBH_EVENT_RESET (1UL << 3) /**< USB Reset completed */ +#define XMC_USBH_EVENT_SUSPEND (1UL << 4) /**< USB Suspend occurred */ +#define XMC_USBH_EVENT_RESUME (1UL << 5) /**< USB Resume occurred */ +#define XMC_USBH_EVENT_REMOTE_WAKEUP (1UL << 6) /**< USB Device activated Remote Wakeup */ + +/****** USB Host Pipe Event *****/ +#define XMC_USBH_EVENT_TRANSFER_COMPLETE (1UL << 0) /**< Transfer completed */ +#define XMC_USBH_EVENT_HANDSHAKE_NAK (1UL << 1) /**< NAK Handshake received */ +#define XMC_USBH_EVENT_HANDSHAKE_NYET (1UL << 2) /**< NYET Handshake received */ +#define XMC_USBH_EVENT_HANDSHAKE_MDATA (1UL << 3) /**< MDATA Handshake received */ +#define XMC_USBH_EVENT_HANDSHAKE_STALL (1UL << 4) /**< STALL Handshake received */ +#define XMC_USBH_EVENT_HANDSHAKE_ERR (1UL << 5) /**< ERR Handshake received */ +#define XMC_USBH_EVENT_BUS_ERROR (1UL << 6) /**< Bus Error detected */ +/******************************************************************************* + * ENUMS + *******************************************************************************/ +/** + * @brief General power states of USB peripheral driver +*/ +typedef enum XMC_USBH_POWER_STATE { + XMC_USBH_POWER_OFF, /**< Power off: no operation possible */ + XMC_USBH_POWER_LOW, /**< Low Power mode: retain state, detect and signal wake-up events */ + XMC_USBH_POWER_FULL /**< Power on: full operation at maximum performance */ +} XMC_USBH_POWER_STATE_t; +/******************************************************************************* + * DATA STRUCTURES + *******************************************************************************/ +/** + * @brief USB host Driver Version +*/ +typedef struct XMC_USBH_DRIVER_VERSION { + uint16_t api; /**< API version */ + uint16_t drv; /**< Driver version */ +} XMC_USBH_DRIVER_VERSION_t; + + +/** + * @brief USB Host Port State +*/ +typedef struct XMC_USBH_PORT_STATE { + uint32_t connected : 1; /**< USB Host Port connected flag */ + uint32_t overcurrent : 1; /**< USB Host Port overcurrent flag */ + uint32_t speed : 2; /**< USB Host Port speed setting (ARM_USB_SPEED_xxx) */ +} XMC_USBH_PORT_STATE_t; + +/** + * @brief USB Host Pipe Handle. It represents the physical address of a USB channel +*/ +typedef uint32_t XMC_USBH_PIPE_HANDLE; +#define XMC_USBH_EP_HANDLE XMC_USBH_PIPE_HANDLE /**< Legacy name for pipe handle used by CMSIS*/ + +/** + * @brief USB Host Driver Capabilities. +*/ +typedef struct XMC_USBH_CAPABILITIES { + uint32_t port_mask : 15; /**< Root HUB available Ports Mask */ + uint32_t auto_split : 1; /**< Automatic SPLIT packet handling */ + uint32_t event_connect : 1; /**< Signal Connect event */ + uint32_t event_disconnect : 1; /**< Signal Disconnect event */ + uint32_t event_overcurrent : 1; /**< Signal Overcurrent event */ +} XMC_USBH_CAPABILITIES_t; + + +typedef void (*XMC_USBH_SignalPortEvent_t) (uint8_t port, uint32_t event); /**< Pointer to \ref ARM_USBH_SignalPortEvent : Signal Root HUB Port Event. */ +typedef void (*XMC_USBH_SignalPipeEvent_t) (XMC_USBH_PIPE_HANDLE pipe_hndl, uint32_t event); /**< Pointer to \ref ARM_USBH_SignalPipeEvent : Signal Pipe Event. */ + +/** + * @brief Access structure of USB Host Driver. +*/ +typedef struct XMC_USBH_DRIVER { + XMC_USBH_DRIVER_VERSION_t (*GetVersion) (void); /**< Pointer to \ref ARM_USBH_GetVersion : Get driver version. */ + XMC_USBH_CAPABILITIES_t (*GetCapabilities) (void); /**< Pointer to \ref ARM_USBH_GetCapabilities : Get driver capabilities. */ + int32_t (*Initialize) (XMC_USBH_SignalPortEvent_t cb_port_event, + XMC_USBH_SignalPipeEvent_t cb_pipe_event); /**< Pointer to \ref ARM_USBH_Initialize : Initialize USB Host Interface. */ + int32_t (*Uninitialize) (void); /**< Pointer to \ref ARM_USBH_Uninitialize : De-initialize USB Host Interface. */ + int32_t (*PowerControl) (XMC_USBH_POWER_STATE_t state); /**< Pointer to \ref ARM_USBH_PowerControl : Control USB Host Interface Power. */ + int32_t (*PortVbusOnOff) (uint8_t port, bool vbus); /**< Pointer to \ref ARM_USBH_PortVbusOnOff : Root HUB Port VBUS on/off. */ + int32_t (*PortReset) (uint8_t port); /**< Pointer to \ref ARM_USBH_PortReset : Do Root HUB Port Reset. */ + int32_t (*PortSuspend) (uint8_t port); /**< Pointer to \ref ARM_USBH_PortSuspend : Suspend Root HUB Port (stop generating SOFs). */ + int32_t (*PortResume) (uint8_t port); /**< Pointer to \ref ARM_USBH_PortResume : Resume Root HUB Port (start generating SOFs). */ + XMC_USBH_PORT_STATE_t (*PortGetState) (uint8_t port); /**< Pointer to \ref ARM_USBH_PortGetState : Get current Root HUB Port State. */ + XMC_USBH_PIPE_HANDLE (*PipeCreate) (uint8_t dev_addr, + uint8_t dev_speed, + uint8_t hub_addr, + uint8_t hub_port, + uint8_t ep_addr, + uint8_t ep_type, + uint16_t ep_max_packet_size, + uint8_t ep_interval); /**< Pointer to \ref ARM_USBH_PipeCreate : Create Pipe in System. */ + int32_t (*PipeModify) (XMC_USBH_PIPE_HANDLE pipe_hndl, + uint8_t dev_addr, + uint8_t dev_speed, + uint8_t hub_addr, + uint8_t hub_port, + uint16_t ep_max_packet_size); /**< Pointer to \ref ARM_USBH_PipeModify : Modify Pipe in System. */ + int32_t (*PipeDelete) (XMC_USBH_PIPE_HANDLE pipe_hndl); /**< Pointer to \ref ARM_USBH_PipeDelete : Delete Pipe from System. */ + int32_t (*PipeReset) (XMC_USBH_PIPE_HANDLE pipe_hndl); /**< Pointer to \ref ARM_USBH_PipeReset : Reset Pipe. */ + int32_t (*PipeTransfer) (XMC_USBH_PIPE_HANDLE pipe_hndl, + uint32_t packet, + uint8_t *data, + uint32_t num); /**< Pointer to \ref ARM_USBH_PipeTransfer : Transfer packets through USB Pipe. */ + uint32_t (*PipeTransferGetResult) (XMC_USBH_PIPE_HANDLE pipe_hndl); /**< Pointer to \ref ARM_USBH_PipeTransferGetResult : Get result of USB Pipe transfer. */ + int32_t (*PipeTransferAbort) (XMC_USBH_PIPE_HANDLE pipe_hndl); /**< Pointer to \ref ARM_USBH_PipeTransferAbort : Abort current USB Pipe transfer. */ + uint16_t (*GetFrameNumber) (void); /**< Pointer to \ref ARM_USBH_GetFrameNumber : Get current USB Frame Number. */ +} const XMC_USBH_DRIVER_t; + + +/** + * @brief Structure to handle various states of USB host driver. An instance exists for each USB channel + */ +typedef struct XMC_USBH0_pipe { + uint32_t packet; /**< Holds packet token and PID information of ongoing data packet transaction*/ + uint8_t *data; /**< Holds address of data buffer. It represents source buffer for OUT or SETUP transfer and + destination address for IN transfer*/ + uint32_t num; /**< Number of bytes of data to be transmitted*/ + uint32_t num_transferred_total; /**< Number of bytes transmitted or received at the moment*/ + uint32_t num_transferring; /**< Number of bytes being transmitted currently*/ + uint16_t ep_max_packet_size; /**< Maximum packet size for the selected pipe*/ + uint16_t interval_reload; /**< For INTERRUPT or ISOCHRONOUS pipe, it represents the period for repeated transfer*/ + uint16_t interval; /**< For INTERRUPT or ISOCHRONOUS pipe, it represents the decrementing count to reach 0 for initiating retransmission*/ + uint8_t ep_type; /**< Endpoint type for selected pipe*/ + uint8_t in_use; /**< Set to true when transfer is in progress and reset only after the /ref num of bytes is transferred*/ + uint8_t transfer_active; /**< Set to true when a transfer has been initiated and reset when event for transfer complete occurs*/ + uint8_t interrupt_triggered; /**< For INTERRUPT or ISOCHRONOUS pipe, indicates if retransmit timeout has occurred*/ + uint8_t event; /**< Holds pipe specific event flags*/ +} XMC_USBH0_pipe_t; + + +typedef struct xmc_usb_host_device { + USB0_GLOBAL_TypeDef *global_register; /**< Global register interface */ + USB0_CH_TypeDef *host_channel_registers; /**< Host channel interface */ + XMC_USBH_SignalPortEvent_t SignalPortEvent_cb; /**< Port event callback; set during init */ + XMC_USBH_SignalPipeEvent_t SignalPipeEvent_cb; /**< Pipe event callback; set during init */ + bool init_done; /**< init status */ + XMC_USBH_POWER_STATE_t power_state; /**< USB Power status */ + bool port_reset_active; /**< Port reset state */ +} XMC_USBH0_DEVICE_t; + +/******************************************************************************* + * API PROTOTYPES + *******************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @param gintsts USB global interrupt status. + * @return None. + * + * \parDescription:
+ * Updates logical state of the USB host driver based on the input status value. It handles port interrupt + * and channel interrupt. It responsible for updating data toggle information for multi-packet data transmission. + * It executes the callback function on transfer completion and reception of data. It also does error management and + * calls the relevant callback functions to indicate it to the application. + */ +void XMC_USBH_HandleIrq (uint32_t gintsts); +/** + * @param ms Delay in milliseconds. + * @return uint8_t Value has no significance for the low level driver. + * + * \parDescription:
+ * Function implements time delay logic. The USB host low level driver provides a weak definition + * for delay which has to re-implemented with time delay logic. The low level driver expects blocking + * implementation of the delay. + */ + uint8_t XMC_USBH_osDelay(uint32_t ms); + +/** + * @param port Address of the port which has the pin used to enable VBUS charge pump. + * @param pin Pin number in the port selected in previous argument using which the VBUS charge pump has to be enabled. + * @return None + * + * \parDescription:
+ * Configures the port pin with alternate output function 1. VBUS enabling pins work with alternate output function 1. \n + * Note:The input port pin should support USB VBUS as an alternate function. \n + * Typical ports that support VBUS enable are: P3_2 and P0_1. + * + */ +void XMC_USBH_Select_VBUS(XMC_GPIO_PORT_t* port, uint32_t pin); + +/** + * @return USB host mode interrupt status. Bit field USB0_BASE->GINTSTS_HOSTMODE + * + * \parDescription:
+ * Provides USB host global interrupt status. \n + * This value can be used to provide interrupt status to the IRQ handler function XMC_USBH_HandleIrq(). + * + */ +uint32_t XMC_USBH_GetInterruptStatus(void); + +/** + * @return None + * + * \parDescription:
+ * De-asserts resume bit. \n + * The function shall be called 20ms after detecting port remote wakeup event. \n + * + */ +void XMC_USBH_TurnOffResumeBit(void); +#ifdef __cplusplus +} +#endif +/** + * @} + */ + +/** + * @} + */ +#endif +#endif /* XMC_USBH_H */ + + diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usic.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usic.h index 32507565..682bb74f 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usic.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_usic.h @@ -1,12 +1,12 @@ /** * @file xmc_usic.h - * @date 2015-10-27 + * @date 2016-04-10 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -67,6 +67,12 @@ * - Added API for enabling the transfer trigger unit to set bit TCSR.TE if the trigger signal DX2T becomes active. Feature used for RS-232 * Clear to Send (CTS) signal: XMC_USIC_CH_EnableTBUFDataValidTrigger() and XMC_USIC_CH_DisableTBUFDataValidTrigger(). * + * 2016-03-09: + * - Optimization of write only registers + * + * 2016-04-10: + * - Added an API to put the data into FIFO when hardware port control is enabled: XMC_USIC_CH_TXFIFO_PutDataHPCMode()
+ * * @endcond * */ @@ -1269,7 +1275,7 @@ __STATIC_INLINE void XMC_USIC_CH_DisableTBUFDataValidTrigger(XMC_USIC_CH_t *cons */ __STATIC_INLINE void XMC_USIC_CH_TriggerServiceRequest(XMC_USIC_CH_t *const channel, const uint32_t service_request_line) { - channel->FMR |= (uint32_t)(USIC_CH_FMR_SIO0_Msk << service_request_line); + channel->FMR = (uint32_t)(USIC_CH_FMR_SIO0_Msk << service_request_line); } /** @@ -1480,6 +1486,30 @@ __STATIC_INLINE void XMC_USIC_CH_TXFIFO_PutDataFLEMode(XMC_USIC_CH_t *const chan channel->IN[frame_length] = data; } +/** + * @param channel Pointer to USIC channel handler of type @ref XMC_USIC_CH_t \n + * \b Range: @ref XMC_USIC0_CH0, @ref XMC_USIC0_CH1 to @ref XMC_USIC2_CH1 based on device support. + * @param data Data to be transmitted. + * @param frame_length Frame length to be configured while transmitting the data. \n + * \b Range: minimum= 0, maximum= 31. e.g: For a frame length of 16, set \a frame_length as 15. + * @return None + * + * \parDescription
+ * Writes data to the transmit FIFO in hardware port control mode. \n\n + * When hardware port control is enabled for dynamic update of frame length, this API can be used. + * \a frame_length represents the frame length to be updated by the peripheral. + * \a frame_length is used as index for the IN[] register array. + * + * \parRelated APIs:
+ * XMC_USIC_CH_EnableFrameLengthControl() \n\n\n + */ +__STATIC_INLINE void XMC_USIC_CH_TXFIFO_PutDataHPCMode(XMC_USIC_CH_t *const channel, + const uint16_t data, + const uint32_t frame_length) +{ + channel->IN[frame_length] = data; +} + /** * @param channel Pointer to USIC channel handler of type @ref XMC_USIC_CH_t \n * \b Range: @ref XMC_USIC0_CH0, @ref XMC_USIC0_CH1 to @ref XMC_USIC2_CH1 based on device support. @@ -1494,7 +1524,7 @@ __STATIC_INLINE void XMC_USIC_CH_TXFIFO_PutDataFLEMode(XMC_USIC_CH_t *const chan */ __STATIC_INLINE void XMC_USIC_CH_TXFIFO_Flush(XMC_USIC_CH_t *const channel) { - channel->TRBSCR |= (uint32_t)USIC_CH_TRBSCR_FLUSHTB_Msk; + channel->TRBSCR = (uint32_t)USIC_CH_TRBSCR_FLUSHTB_Msk; } /** @@ -1599,7 +1629,7 @@ __STATIC_INLINE uint32_t XMC_USIC_CH_TXFIFO_GetEvent(XMC_USIC_CH_t *const channe __STATIC_INLINE void XMC_USIC_CH_TXFIFO_ClearEvent(XMC_USIC_CH_t *const channel, const uint32_t event) { - channel->TRBSCR |= event; + channel->TRBSCR = event; } /** @@ -1760,7 +1790,7 @@ __STATIC_INLINE uint16_t XMC_USIC_CH_RXFIFO_GetData(XMC_USIC_CH_t *const channel */ __STATIC_INLINE void XMC_USIC_CH_RXFIFO_Flush(XMC_USIC_CH_t *const channel) { - channel->TRBSCR |= (uint32_t)USIC_CH_TRBSCR_FLUSHRB_Msk; + channel->TRBSCR = (uint32_t)USIC_CH_TRBSCR_FLUSHRB_Msk; } /** @@ -1870,7 +1900,7 @@ __STATIC_INLINE uint32_t XMC_USIC_CH_RXFIFO_GetEvent(XMC_USIC_CH_t *const channe __STATIC_INLINE void XMC_USIC_CH_RXFIFO_ClearEvent(XMC_USIC_CH_t *const channel, const uint32_t event) { - channel->TRBSCR |= event; + channel->TRBSCR = event; } /** diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_vadc.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_vadc.h index 7859c604..b6a30f25 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_vadc.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_vadc.h @@ -1,12 +1,12 @@ /** * @file xmc_vadc.h - * @date 2015-10-27 + * @date 2016-06-17 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -66,6 +66,42 @@ * - XMC_VADC_GROUP_ChannelGetResultAlignment * - XMC_VADC_GROUP_ChannelGetInputClass * - XMC_VADC_GROUP_SetResultSubtractionValue + * + * 2015-12-01: + * - Added: + * - XMC4300 device supported + * + * - Fixed: + * - XMC_VADC_GLOBAL_TriggerEvent API updated. OR operation removed. + * - XMC_VADC_GLOBAL_ClearEvent API updated. Multiple events triggering on clearing the event is fixed. + * - Wrong MACRO name defined in xmc_vadc_map.h file corrected for XMC4200/4100 devices. + * XMC_VADC_G3_SAMPLE renamed to XMC_VADC_G1_SAMPLE + * + * 2015-12-01: + * - New APIs Created. + * - XMC_VADC_GROUP_ScanIsArbitrationSlotEnabled + * - XMC_VADC_GROUP_QueueIsArbitrationSlotEnabled + * - Fixed the analog calibration voltage for XMC1100 to external reference upper supply range. + * - Fixed the XMC_VADC_GLOBAL_StartupCalibration() for XMC1100. + * + * 2016-03-09: + * - Optimization of write only registers + * + * 2016-03-18: + * - Fixed XMC_VADC_GLOBAL_SHS_IsConverterReady(): API checks the STEPCFG register for the ready bit instead of + * SHSCFG SFR. + * + * 2016-06-17: + * - New macros added XMC_VADC_SHS_FULL_SET_REG, XMC_VADC_RESULT_PRIORITY_AVAILABLE + * - New Enum added XMC_VADC_SHS_GAIN_LEVEL_t and XMC_VADC_SYNCTR_EVAL_t + * - New APIs added are: + * - XMC_VADC_GROUP_SetSyncSlaveReadySignal + * - XMC_VADC_GROUP_ChannelGetAssertedEvents + * - XMC_VADC_GROUP_GetAssertedResultEvents + * - XMC_VADC_GROUP_SetResultRegPriority + * - XMC_VADC_GROUP_SetSyncReadySignal + * - XMC_VADC_GROUP_GetSyncReadySignal + * - XMC_VADC_GROUP_GetResultRegPriority * @endcond * */ @@ -145,20 +181,22 @@ * MACROS ********************************************************************************************************************/ -#if ((UC_SERIES == XMC42)||(UC_SERIES == XMC41)) -#define XMC_VADC_GROUP_AVAILABLE (1U) /* Defines the availability of group resource in a device*/ -#define XMC_VADC_GSCAN_AVAILABLE (1U) /* Defines the availability of scan request resource in a device*/ -#define XMC_VADC_QUEUE_AVAILABLE (1U) /* Defines the availability of queue request resource in a device*/ -#define XMC_VADC_EMUX_AVAILABLE (1U) /* Defines the availability of external multiplexer support in a +#if ((UC_SERIES == XMC42)||(UC_SERIES == XMC41) || (UC_SERIES == XMC43)) +#define XMC_VADC_GROUP_AVAILABLE (1U) /* Defines the availability of group resource in a device*/ +#define XMC_VADC_GSCAN_AVAILABLE (1U) /* Defines the availability of scan request resource in a device*/ +#define XMC_VADC_QUEUE_AVAILABLE (1U) /* Defines the availability of queue request resource in a device*/ +#define XMC_VADC_EMUX_AVAILABLE (1U) /* Defines the availability of external multiplexer support in a device*/ -#define XMC_VADC_BOUNDARY_AVAILABLE (1U) /* Defines the availability of boundary check support in a device*/ -#define XMC_VADC_MULTIPLE_SLAVEGROUPS (1U) /* Defines the availability of synchronous request source in device*/ -#define XMC_VADC_MAXIMUM_NUM_GROUPS (2U) /* Defines the maximum number of groups available in a device*/ -#define XMC_VADC_BOUNDARY_FLAG_SELECT (1U) /* Defines the availability of boundary flags in a device*/ -#define XMC_VADC_EMUX_CH_SEL_STYLE (1U) /* Defines the external multiplexer channel selection mode of +#define XMC_VADC_BOUNDARY_AVAILABLE (1U) /* Defines the availability of boundary check support in a device*/ +#define XMC_VADC_MULTIPLE_SLAVEGROUPS (1U) /* Defines the availability of synchronous request source in device*/ +#define XMC_VADC_MAXIMUM_NUM_GROUPS (2U) /* Defines the maximum number of groups available in a device*/ +#define XMC_VADC_BOUNDARY_FLAG_SELECT (1U) /* Defines the availability of boundary flags in a device*/ +#define XMC_VADC_EMUX_CH_SEL_STYLE (1U) /* Defines the external multiplexer channel selection mode of operation for a particular device*/ -#define XMC_VADC_SHS_AVAILABLE (0U) /* Defines the availability of sample and hold module*/ -#define XMC_VADC_GROUP_SRCREG_AVAILABLE (1U) /* Define the availability of a source specific result register */ +#define XMC_VADC_SHS_AVAILABLE (0U) /* Defines the availability of sample and hold module*/ +#define XMC_VADC_SHS_FULL_SET_REG (0U) /* Defines the availability of sample and hold module*/ +#define XMC_VADC_GROUP_SRCREG_AVAILABLE (1U) /* Define the availability of a source specific result register */ +#define XMC_VADC_RESULT_PRIORITY_AVAILABLE (0U) /* Define the availability of a priority for result register */ #endif #if (UC_SERIES == XMC44 || UC_SERIES == XMC47 || UC_SERIES == XMC48) @@ -174,7 +212,9 @@ #define XMC_VADC_EMUX_CH_SEL_STYLE (1U) /* Defines the external multiplexer channel selection mode of operation for a particular device*/ #define XMC_VADC_SHS_AVAILABLE (0U) /* Defines the availability of sample and hold module*/ +#define XMC_VADC_SHS_FULL_SET_REG (0U) /* Defines the availability of sample and hold module*/ #define XMC_VADC_GROUP_SRCREG_AVAILABLE (1U) /* Define the availability of a source specific result register */ +#define XMC_VADC_RESULT_PRIORITY_AVAILABLE (0U) /* Define the availability of a priority for result register */ #endif #if (UC_SERIES == XMC45) @@ -190,7 +230,9 @@ #define XMC_VADC_EMUX_CH_SEL_STYLE (0U) /* Defines the external multiplexer channel selection mode of operation for a particular device*/ #define XMC_VADC_SHS_AVAILABLE (0U) /* Defines the availability of sample and hold module*/ +#define XMC_VADC_SHS_FULL_SET_REG (0U) /* Defines the availability of sample and hold module*/ #define XMC_VADC_GROUP_SRCREG_AVAILABLE (0U) /* Define the availability of a source specific result register */ +#define XMC_VADC_RESULT_PRIORITY_AVAILABLE (0U) /* Define the availability of a priority for result register */ #endif #if (UC_SERIES == XMC14 || UC_SERIES == XMC13 || UC_SERIES == XMC12) @@ -206,7 +248,9 @@ #define XMC_VADC_EMUX_CH_SEL_STYLE (1U) /* Defines the external multiplexer channel selection mode of operation for a particular device*/ #define XMC_VADC_SHS_AVAILABLE (1U) /* Defines the availability of sample and hold module*/ +#define XMC_VADC_SHS_FULL_SET_REG (1U) /* Defines the availability of sample and hold module*/ #define XMC_VADC_GROUP_SRCREG_AVAILABLE (1U) /* Define the availability of a source specific result register */ +#define XMC_VADC_RESULT_PRIORITY_AVAILABLE (1U) /* Define the availability of a priority for result register */ #endif #if (UC_SERIES == XMC11) @@ -225,8 +269,10 @@ XMC1100 device for effective working*/ #define XMC_VADC_EMUX_CH_SEL_STYLE (0U) /* Defines the external multiplexer channel selection mode of operation for a particular device*/ -#define XMC_VADC_SHS_AVAILABLE (0U) /* Defines the availability of sample and hold module*/ +#define XMC_VADC_SHS_AVAILABLE (1U) /* Defines the availability of sample and hold module*/ +#define XMC_VADC_SHS_FULL_SET_REG (0U) /* Defines the availability of sample and hold module*/ #define XMC_VADC_GROUP_SRCREG_AVAILABLE (0U) /* Define the availability of a source specific result register */ +#define XMC_VADC_RESULT_PRIORITY_AVAILABLE (0U) /* Define the availability of a priority for result register */ #endif #define XMC_VADC_NUM_PORTS (16U) /* Defines the number of hardware ports that can be configured @@ -652,6 +698,8 @@ typedef enum XMC_VADC_CHANNEL_ALIAS } XMC_VADC_CHANNEL_ALIAS_t; #if(XMC_VADC_SHS_AVAILABLE == 1U) + +#if(XMC_VADC_SHS_FULL_SET_REG == 1U) /** * Defines the gain calibration selection. */ @@ -662,6 +710,7 @@ typedef enum XMC_VADC_SHS_GAIN_LEVEL XMC_VADC_SHS_GAIN_LEVEL_2 = SHS_CALOC0_CALOFFVAL2_Pos, /**< Select the calibration value for gain level 2 */ XMC_VADC_SHS_GAIN_LEVEL_3 = SHS_CALOC0_CALOFFVAL3_Pos /**< Select the calibration value for gain level 3 */ }XMC_VADC_SHS_GAIN_LEVEL_t; +#endif /** * Defines the Delta sigma loop. @@ -698,6 +747,20 @@ typedef enum XMC_VADC_BOUNDARY_NODE XMC_VADC_BOUNDARY_NODE_COMMON_SR_LINE_3 /** 2U) + XMC_VADC_SYNCTR_EVAL_2 = VADC_G_SYNCTR_EVALR2_Msk, /**GLOBEFLAG |= event_type; + global_ptr->GLOBEFLAG = event_type; } /** @@ -1760,7 +1824,7 @@ __STATIC_INLINE void XMC_VADC_GLOBAL_ClearEvent(XMC_VADC_GLOBAL_t *const global_ XMC_ASSERT("XMC_VADC_GLOBAL_ClearEvent:Wrong Global Event", ((XMC_VADC_GLOBAL_EVENT_BKGNDSOURCE == event_type) || (XMC_VADC_GLOBAL_EVENT_RESULT == event_type))) - global_ptr->GLOBEFLAG |= ((uint32_t)(event_type << (uint32_t)16)); + global_ptr->GLOBEFLAG = ((uint32_t)(event_type << (uint32_t)16)); } /** @@ -1813,6 +1877,7 @@ void XMC_VADC_GLOBAL_BackgroundSetReqSrcEventInterruptNode(XMC_VADC_GLOBAL_t *co */ void XMC_VADC_GLOBAL_SHS_Init(XMC_VADC_GLOBAL_SHS_t *const shs_ptr, const XMC_VADC_GLOBAL_SHS_CONFIG_t *config); +#if(XMC_VADC_SHS_FULL_SET_REG == 1U) /** * @param shs_ptr Constant pointer to the VADC Sample and hold module * @param config Struct consisting of various step configurations. @@ -1837,7 +1902,7 @@ void XMC_VADC_GLOBAL_BackgroundSetReqSrcEventInterruptNode(XMC_VADC_GLOBAL_t *co shs_ptr->STEPCFG = (uint32_t) config->stepcfg; } - +#endif /** * @param shs_ptr Constant pointer to the VADC Sample and hold module @@ -1856,10 +1921,10 @@ void XMC_VADC_GLOBAL_BackgroundSetReqSrcEventInterruptNode(XMC_VADC_GLOBAL_t *co { XMC_ASSERT("XMC_VADC_GLOBAL_SHS_IsConverterReady:Wrong SHS Pointer",(shs_ptr == (XMC_VADC_GLOBAL_SHS_t*)(void*)SHS0)) - return((bool)((shs_ptr->STEPCFG >> (uint32_t)SHS_SHSCFG_ANRDY_Pos) & (uint32_t)0x1)); + return((bool)((shs_ptr->SHSCFG >> (uint32_t)SHS_SHSCFG_ANRDY_Pos) & (uint32_t)0x1)); } - +#if(XMC_VADC_SHS_FULL_SET_REG == 1U) /** * @param shs_ptr Constant pointer to the VADC Sample and hold module * @param group_num group number for which the accelerated mode needs to be enabled.
Range: [0x0 to 0x1] @@ -1914,7 +1979,7 @@ void XMC_VADC_GLOBAL_SHS_SetShortSampleTime(XMC_VADC_GLOBAL_SHS_t *const shs_ptr XMC_VADC_GROUP_INDEX_t group_num, uint8_t sst_value); - +#endif /** * @param shs_ptr Constant pointer to the VADC Sample and hold module * @param divs_value The clock divider value that is possible @@ -1960,7 +2025,7 @@ void XMC_VADC_GLOBAL_SHS_SetGainFactor(XMC_VADC_GLOBAL_SHS_t *const shs_ptr, XMC_VADC_GROUP_INDEX_t group_num, uint8_t ch_num); - +#if(XMC_VADC_SHS_FULL_SET_REG == 1U) /** * @param shs_ptr Constant pointer to the VADC Sample and hold module * @param max_calibration_time calibration time @@ -2053,6 +2118,7 @@ void XMC_VADC_GLOBAL_SHS_SetOffsetCalibrationValue(XMC_VADC_GLOBAL_SHS_t *const XMC_VADC_GROUP_INDEX_t group_num, XMC_VADC_SHS_GAIN_LEVEL_t gain_level, uint8_t offset_calibration_value); +#endif /** * @param shs_ptr Constant pointer to the VADC Sample and hold module @@ -2269,6 +2335,81 @@ void XMC_VADC_GROUP_CheckSlaveReadiness(XMC_VADC_GROUP_t *const group_ptr, uint3 */ void XMC_VADC_GROUP_IgnoreSlaveReadiness(XMC_VADC_GROUP_t *const group_ptr, uint32_t slave_group); +/** + * + * @param group_ptr Constant Pointer to the VADC Group waiting for ready signal + * @param eval_waiting_group The VADC Group which expects a ready signal to start it's conversion. + * @param eval_origin_group The VADC Group from which the eval_waiting_group will expect a ready signal + * @return None + * + * \parDescription:
+ * Sets the ready signal in the eval_waiting_group .
\n + * For Synchronized conversion all the slaves participating need to configure the ready signal. + * A slave group will also need to configure the ready signals coming from the other slave groups. + * A call to this API would configure the Sync.slave's EVAL Bits (GxSYNCTR.EVALy). + * + * \parRelated APIs:
+ * XMC_VADC_GROUP_CheckSlaveReadiness()
XMC_VADC_GROUP_IgnoreSlaveReadiness()
+ */ +void XMC_VADC_GROUP_SetSyncSlaveReadySignal(XMC_VADC_GROUP_t *const group_ptr, + uint32_t eval_waiting_group, + uint32_t eval_origin_group); + +/** + * + * @param group_ptr Constant Pointer to the VADC Group + * @return + * uint32_t EVAL bits for the group + * + * \parDescription:
+ * Get the Eval bits of the group.
\n + * For Synchronized conversion the master's ready signal configuration must be copied onto the slaves. + * A call to this API would return the Sync EVAL Bits (GxSYNCTR.EVALy) which can be used to set in the slaves. + * + * \parRelated APIs:
+ * XMC_VADC_GROUP_CheckSlaveReadiness()
XMC_VADC_GROUP_IgnoreSlaveReadiness()
+ */ +__STATIC_INLINE uint32_t XMC_VADC_GROUP_GetSyncReadySignal(XMC_VADC_GROUP_t *const group_ptr) +{ + uint32_t eval_mask; + XMC_ASSERT("XMC_VADC_GROUP_GetSyncReadySignal:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) + +#if (XMC_VADC_MAXIMUM_NUM_GROUPS > 2U) + eval_mask = VADC_G_SYNCTR_EVALR1_Msk | VADC_G_SYNCTR_EVALR2_Msk | VADC_G_SYNCTR_EVALR3_Msk; +#else + eval_mask = VADC_G_SYNCTR_EVALR1_Msk; +#endif + return( group_ptr->SYNCTR & eval_mask); +} + +/** + * @param group_ptr Constant Pointer to the VADC Group + * @param eval_mask mask to configure the eval bits + * Use XMC_VADC_SYNCTR_EVAL_t to create the mask. + * @return None + * + * \parDescription:
+ * Set the Eval bits of the group.
\n + * For Synchronized conversion the master's ready signal configuration must be copied onto the slaves. + * A call to this API would configure the Sync EVAL Bits (GxSYNCTR.EVALy). + * + * \parRelated APIs:
+ * XMC_VADC_GROUP_CheckSlaveReadiness()
XMC_VADC_GROUP_IgnoreSlaveReadiness()
+ */ +__STATIC_INLINE void XMC_VADC_GROUP_SetSyncReadySignal(XMC_VADC_GROUP_t *const group_ptr, uint32_t mask) +{ + uint32_t eval_mask; + XMC_ASSERT("XMC_VADC_GROUP_SetSyncReadySignal:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) + +#if (XMC_VADC_MAXIMUM_NUM_GROUPS > 2U) + eval_mask = VADC_G_SYNCTR_EVALR1_Msk | VADC_G_SYNCTR_EVALR2_Msk | VADC_G_SYNCTR_EVALR3_Msk; +#else + eval_mask = VADC_G_SYNCTR_EVALR1_Msk; +#endif + group_ptr->SYNCTR &= ~(eval_mask); + group_ptr->SYNCTR |= mask; +} + /** * * @param group_ptr Constant pointer to the master VADC Group @@ -2439,7 +2580,7 @@ __STATIC_INLINE void XMC_VADC_GROUP_ExternalMuxControlInit(XMC_VADC_GROUP_t *con void XMC_VADC_GROUP_SetBoundaryEventInterruptNode(XMC_VADC_GROUP_t *const group_ptr, const uint8_t boundary_flag_num, const XMC_VADC_BOUNDARY_NODE_t node); -#endif /* XMC_VADC_BOUNDARY_FLAG_SELECT */ +#endif /** * @param group_ptr Constant pointer to the VADC group @@ -2488,7 +2629,7 @@ __STATIC_INLINE XMC_VADC_GROUP_CLASS_t XMC_VADC_GROUP_GetInputClass(XMC_VADC_GRO return (input_value); } -#endif /* XMC_VADC_GROUP_AVAILABLE */ +#endif #if (XMC_VADC_GSCAN_AVAILABLE == 1U) /** @@ -2553,6 +2694,28 @@ __STATIC_INLINE void XMC_VADC_GROUP_ScanDisableArbitrationSlot(XMC_VADC_GROUP_t group_ptr->ARBPR &= ~((uint32_t)VADC_G_ARBPR_ASEN1_Msk); } +/** + * @param group_ptr Constant pointer to the VADC group + * @return + * bool returns true if the arbitration is enabled else returns false. + * + * \parDescription:
+ * Returns the arbitration status of the scan request source.
\n + * If the scan request source must have its conversion request considered by the arbiter, it must participate in + * the arbitration rounds. Even if a load event occurs the scan channel can only be converted when the arbiter comes + * to the scan slot. A call to this API would return the status of the arbitration slot of scan. + * A call to this API would read the register bit field GxARBPR.ASEN1. + * + * \parRelated APIs:
+ * XMC_VADC_GROUP_ScanEnableArbitrationSlot(),
XMC_VADC_GROUP_ScanDisableArbitrationSlot()
+ */ +__STATIC_INLINE bool XMC_VADC_GROUP_ScanIsArbitrationSlotEnabled(XMC_VADC_GROUP_t *const group_ptr) +{ + XMC_ASSERT("XMC_VADC_GROUP_ScanIsArbitrationSlotEnabled:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) + + return ((group_ptr->ARBPR & (uint32_t)VADC_G_ARBPR_ASEN1_Msk) >> VADC_G_ARBPR_ASEN1_Pos); +} + /** * @param group_ptr Constant pointer to the VADC group * @param trigger_input Choice of the input earmarked as a trigger line @@ -2946,6 +3109,48 @@ __STATIC_INLINE void XMC_VADC_GROUP_ScanDisableExternalTrigger(XMC_VADC_GROUP_t * None. */ void XMC_VADC_GROUP_ScanRemoveChannel(XMC_VADC_GROUP_t *const group_ptr, const uint32_t channel_num); + +/** + * @param group_ptr Constant pointer to the VADC group + * @return + * None + * + * \parDescription:
+ * Enables the scan request source event .
+ * By using this API the request source event will be activated for the scan request source. + * Other configurations w.r.t service node pointer are not done in this API. + * A call to this API would configure the register bit field GxASMR.ENSI. + * + * \parRelated APIs:
+ * XMC_VADC_GROUP_ScanDisableEvent(),
XMC_VADC_GROUP_ScanSetReqSrcEventInterruptNode()
+ */ +__STATIC_INLINE void XMC_VADC_GROUP_ScanEnableEvent(XMC_VADC_GROUP_t *const group_ptr) +{ + XMC_ASSERT("XMC_VADC_GROUP_ScanEnableEvent:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) + + group_ptr->ASMR |= ((uint32_t)VADC_G_ASMR_ENSI_Msk); +} + +/** + * @param group_ptr Constant pointer to the VADC group + * @return + * None + * + * \parDescription:
+ * Disables the scan request source event .
+ * By using this API the request source event will be deactivated for the scan request source. + * Other configurations w.r.t service node pointer are not done in this API. + * A call to this API would configure the register bit field GxASMR.ENSI. + * + * \parRelated APIs:
+ * XMC_VADC_GROUP_ScanEnableEvent(),
XMC_VADC_GROUP_ScanSetReqSrcEventInterruptNode()
+ */ +__STATIC_INLINE void XMC_VADC_GROUP_ScanDisableEvent(XMC_VADC_GROUP_t *const group_ptr) +{ + XMC_ASSERT("XMC_VADC_GROUP_ScanDisableEvent:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) + + group_ptr->ASMR &= ~((uint32_t)VADC_G_ASMR_ENSI_Msk); +} #endif /** @@ -3366,7 +3571,7 @@ __STATIC_INLINE bool XMC_VADC_GLOBAL_BackgroundGetReqSrcEventStatus(XMC_VADC_GLO */ __STATIC_INLINE void XMC_VADC_GLOBAL_BackgroundEnableExternalTrigger(XMC_VADC_GLOBAL_t *const global_ptr) { - XMC_ASSERT("XMC_VADC_GLOBAL_BackgroundEnableExternalTrigger:Wrong Group Pointer", (global_ptr == VADC)) + XMC_ASSERT("XMC_VADC_GLOBAL_BackgroundEnableExternalTrigger:Wrong Module Pointer", (global_ptr == VADC)) global_ptr->BRSMR |= (uint32_t)VADC_BRSMR_ENTR_Msk; } @@ -3388,11 +3593,53 @@ __STATIC_INLINE void XMC_VADC_GLOBAL_BackgroundEnableExternalTrigger(XMC_VADC_GL */ __STATIC_INLINE void XMC_VADC_GLOBAL_BackgroundDisableExternalTrigger(XMC_VADC_GLOBAL_t *const global_ptr) { - XMC_ASSERT("XMC_VADC_GLOBAL_BackgroundDisableExternalTrigger:Wrong Group Pointer", (global_ptr == VADC)) + XMC_ASSERT("XMC_VADC_GLOBAL_BackgroundDisableExternalTrigger:Wrong Module Pointer", (global_ptr == VADC)) global_ptr->BRSMR &= ~((uint32_t)VADC_BRSMR_ENTR_Msk); } +/** + * @param global_ptr Pointer to the VADC module + * @return + * None + * + * \parDescription:
+ * Enables the background scan request source event .
+ * By using this API the request source event will be activated for the background scan request source. + * Other configurations w.r.t service node pointer are not done in this API. + * A call to this API would configure the register bit field BRSMR.ENSI. + * + * \parRelated APIs:
+ * XMC_VADC_GLOBAL_BackgroundEnableEvent(),
XMC_VADC_GLOBAL_BackgroundSetReqSrcEventInterruptNode()
+ */ +__STATIC_INLINE void XMC_VADC_GLOBAL_BackgroundEnableEvent(XMC_VADC_GLOBAL_t *const global_ptr) +{ + XMC_ASSERT("XMC_VADC_GLOBAL_BackgroundEnableEvent:Wrong Module Pointer", (global_ptr == VADC)) + + global_ptr->BRSMR |= ((uint32_t)VADC_BRSMR_ENSI_Msk); +} + +/** + * @param global_ptr Pointer to the VADC module + * @return + * None + * + * \parDescription:
+ * Disables the background scan request source event .
+ * By using this API the request source event will be deactivated for the background scan request source. + * Other configurations w.r.t service node pointer are not done in this API. + * A call to this API would configure the register bit field BRSMR.ENSI. + * + * \parRelated APIs:
+ * XMC_VADC_GROUP_BackgroundEnableEvent(),
XMC_VADC_GLOBAL_BackgroundSetReqSrcEventInterruptNode()
+ */ +__STATIC_INLINE void XMC_VADC_GLOBAL_BackgroundDisableEvent(XMC_VADC_GLOBAL_t *const global_ptr) +{ + XMC_ASSERT("XMC_VADC_GLOBAL_BackgroundDisableEvent:Wrong Module Pointer", (global_ptr == VADC)) + + global_ptr->BRSMR &= ~((uint32_t)VADC_BRSMR_ENSI_Msk); +} + #if (XMC_VADC_QUEUE_AVAILABLE == 1U) /** * @param group_ptr Pointer to the VADC group @@ -3458,6 +3705,29 @@ __STATIC_INLINE void XMC_VADC_GROUP_QueueDisableArbitrationSlot(XMC_VADC_GROUP_t group_ptr->ARBPR &= ~((uint32_t)VADC_G_ARBPR_ASEN0_Msk); } + +/** + * @param group_ptr Constant pointer to the VADC group + * @return + * bool returns true if the arbitration is enabled else returns false. + * + * \parDescription:
+ * Returns the arbitration status of the queue request source.
\n + * If the queue request source must have its conversion request considered by the arbiter, it must participate in + * the arbitration rounds. Even if a load event occurs the queue channel can only be converted when the arbiter comes + * to the queue slot. A call to this API would return the status of the arbitration slot of queue. + * A call to this API would read the register bit field GxARBPR.ASEN1. + * + * \parRelated APIs:
+ * XMC_VADC_GROUP_QueueEnableArbitrationSlot(),
XMC_VADC_GROUP_QueueDisableArbitrationSlot()
+ */ +__STATIC_INLINE bool XMC_VADC_GROUP_QueueIsArbitrationSlotEnabled(XMC_VADC_GROUP_t *const group_ptr) +{ + XMC_ASSERT("XMC_VADC_GROUP_QueueIsArbitrationSlotEnabled:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) + + return ((group_ptr->ARBPR & (uint32_t)VADC_G_ARBPR_ASEN0_Msk) >> VADC_G_ARBPR_ASEN0_Pos); +} + /** * @param group_ptr Constant pointer to the VADC group * @param input_num Choice of the input earmarked as a trigger line @@ -3756,7 +4026,7 @@ __STATIC_INLINE void XMC_VADC_GROUP_QueueTriggerReqSrcEvent(XMC_VADC_GROUP_t *co __STATIC_INLINE void XMC_VADC_GROUP_QueueClearReqSrcEvent(XMC_VADC_GROUP_t *const group_ptr) { XMC_ASSERT("XMC_VADC_GROUP_QueueClearReqSrcEvent:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) - group_ptr->SEFCLR |= (uint32_t)VADC_G_SEFCLR_SEV0_Msk; + group_ptr->SEFCLR = (uint32_t)VADC_G_SEFCLR_SEV0_Msk; } /** @@ -4072,6 +4342,25 @@ uint8_t XMC_VADC_GROUP_ChannelGetResultRegister(XMC_VADC_GROUP_t *const group_pt */ void XMC_VADC_GROUP_ChannelTriggerEvent(XMC_VADC_GROUP_t *const group_ptr, const uint32_t ch_num); +/** + * @param group_ptr Constant pointer to the VADC group + * @return + * uint32_t returns the asserted channel events + * + * \parDescription:
+ * Returns the Channel event flag register.
\n + * The return is merely the channel events which are asserted. + * A call to this API would read the register bit fields of GxCEFLAG. + * + * \parRelated APIs:
+ * XMC_VADC_GROUP_ChannelClearEvent(). + */ +__STATIC_INLINE uint32_t XMC_VADC_GROUP_ChannelGetAssertedEvents(XMC_VADC_GROUP_t *const group_ptr) +{ + XMC_ASSERT("XMC_VADC_GROUP_ChannelGetAssertedEvents:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) + return(group_ptr->CEFLAG); +} + /** * @param group_ptr Constant pointer to the VADC group * @param ch_num Channel whose channel event is to be acknowledged @@ -4093,7 +4382,7 @@ __STATIC_INLINE void XMC_VADC_GROUP_ChannelClearEvent(XMC_VADC_GROUP_t *const gr XMC_ASSERT("XMC_VADC_GROUP_ChannelClearEvent:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) XMC_ASSERT("XMC_VADC_GROUP_ChannelClearEvent:Wrong Channel Number", ((ch_num) < XMC_VADC_NUM_CHANNELS_PER_GROUP)) - group_ptr->CEFCLR |= (uint32_t)((uint32_t)1 << ch_num); + group_ptr->CEFCLR = (uint32_t)((uint32_t)1 << ch_num); } /** @@ -4404,6 +4693,25 @@ __STATIC_INLINE void XMC_VADC_GROUP_TriggerResultEvent(XMC_VADC_GROUP_t *const g group_ptr->REFLAG = (uint32_t)((uint32_t)1 << res_reg); } +/** + * @param group_ptr Constant pointer to the VADC group + * @return + * uint32_t returns the asserted result events + * + * \parDescription:
+ * Returns the Result event flag register.
\n + * The return is merely the result events which are asserted. + * A call to this API would read the register bit fields of GxREFLAG. + * + * \parRelated APIs:
+ * XMC_VADC_GROUP_TriggerResultEvent(). + */ +__STATIC_INLINE uint32_t XMC_VADC_GROUP_GetAssertedResultEvents(XMC_VADC_GROUP_t *const group_ptr) +{ + XMC_ASSERT("XMC_VADC_GROUP_GetAssertedResultEvents:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) + return(group_ptr->REFLAG); +} + /** * @param group_ptr Constant pointer to the VADC group * @param res_reg Result Register for which the result event is being acknowledged @@ -4529,6 +4837,50 @@ __STATIC_INLINE bool XMC_VADC_GROUP_IsResultRegisterInFifo(XMC_VADC_GROUP_t *con ((res_reg) < XMC_VADC_NUM_RESULT_REGISTERS)) return( (bool)(group_ptr->RCR[res_reg] & (uint32_t)VADC_G_RCR_FEN_Msk)); } + +#if XMC_VADC_RESULT_PRIORITY_AVAILABLE == 1U +/** + * @param group_ptr Constant pointer to the VADC group + * @param res_reg Result Registers which need to be set for priority conversions + * Bit location 0..15 represents Result Register-0..15 respectively. + * To add the result register as priority. + * Passing a 0x0 will clear all the selected channels + *
Range: [0x0 to 0xFFFF] + * @return + * None + * + * \parDescription:
+ * Prioritize a Result register for group conversions.
\n + * Applications that need to reserve certain result registers only for Queue and scan request sources should + * use this API. A call to this API would access the register bit fields of GxRRASS. + * + * \parRelated APIs:
+ * XMC_VADC_GROUP_GetResultRegPriority(). + */ +__STATIC_INLINE void XMC_VADC_GROUP_SetResultRegPriority(XMC_VADC_GROUP_t *const group_ptr, const uint32_t res_mask) +{ + XMC_ASSERT("XMC_VADC_GROUP_SetResultRegPriority:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) + group_ptr->RRASS = (uint32_t)res_mask; +} + +/** + * @param group_ptr Constant pointer to the VADC group + * @return + * None + * + * \parDescription:
+ * Get the priority of all Result register.
\n + * A call to this API would access the register bit fields of GxRRASS. + * + * \parRelated APIs:
+ * XMC_VADC_GROUP_SetResultRegPriority(). + */ +__STATIC_INLINE uint32_t XMC_VADC_GROUP_GetResultRegPriority(XMC_VADC_GROUP_t *const group_ptr) +{ + XMC_ASSERT("XMC_VADC_GROUP_GetResultRegPriority:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) + return(group_ptr->RRASS); +} +#endif #endif #ifdef __cplusplus @@ -4544,4 +4896,4 @@ __STATIC_INLINE bool XMC_VADC_GROUP_IsResultRegisterInFifo(XMC_VADC_GROUP_t *con */ -#endif /* XMC_VADC_H */ +#endif diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_vadc_map.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_vadc_map.h index aa2219f4..074e3dcb 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_vadc_map.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_vadc_map.h @@ -1,12 +1,12 @@ /** * @file xmc_vadc_map.h - * @date 2015-10-27 + * @date 2015-12-01 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -39,6 +39,13 @@ * 2015-02-15: * - Initial version * + * 2015-12-01: + * - Added: + * - XMC4300 device supported + * + * - Fixed: + * - Wrong MACRO name corrected for XMC4200/4100 devices. + * XMC_VADC_G3_SAMPLE renamed to XMC_VADC_G1_SAMPLE * @endcond * */ @@ -56,23 +63,23 @@ extern "C" { * MACROS *********************************************************************************************************************/ /* Group request source Gating input connection mappings */ -#define XMC_CCU_40_ST3 XMC_VADC_REQ_GT_A -#define XMC_CCU_40_ST2 XMC_VADC_REQ_GT_B -#define XMC_CCU_40_ST1 XMC_VADC_REQ_GT_C -#define XMC_CCU_40_ST0 XMC_VADC_REQ_GT_D -#define XMC_ERU_0_PDOUT2 XMC_VADC_REQ_GT_K -#define XMC_ERU_0_PDOUT3 XMC_VADC_REQ_GT_L -#define XMC_ERU_0_PDOUT0 XMC_VADC_REQ_GT_O -#define XMC_ERU_0_PDOUT1 XMC_VADC_REQ_GT_P +#define XMC_CCU_40_ST3 XMC_VADC_REQ_GT_A +#define XMC_CCU_40_ST2 XMC_VADC_REQ_GT_B +#define XMC_CCU_40_ST1 XMC_VADC_REQ_GT_C +#define XMC_CCU_40_ST0 XMC_VADC_REQ_GT_D +#define XMC_ERU_0_PDOUT2 XMC_VADC_REQ_GT_K +#define XMC_ERU_0_PDOUT3 XMC_VADC_REQ_GT_L +#define XMC_ERU_0_PDOUT0 XMC_VADC_REQ_GT_O +#define XMC_ERU_0_PDOUT1 XMC_VADC_REQ_GT_P /* Group request source Trigger input connection mappings */ -#define XMC_CCU_40_SR2 XMC_VADC_REQ_TR_A -#define XMC_CCU_40_SR3 XMC_VADC_REQ_TR_B -#define XMC_ERU_0_IOUT2 XMC_VADC_REQ_TR_G -#define XMC_ERU_0_IOUT3 XMC_VADC_REQ_TR_H -#define XMC_ERU_0_IOUT0 XMC_VADC_REQ_TR_M -#define XMC_ERU_0_IOUT1 XMC_VADC_REQ_TR_N -#define XMC_REQ_GT_SEL XMC_VADC_REQ_TR_P +#define XMC_CCU_40_SR2 XMC_VADC_REQ_TR_A +#define XMC_CCU_40_SR3 XMC_VADC_REQ_TR_B +#define XMC_ERU_0_IOUT2 XMC_VADC_REQ_TR_G +#define XMC_ERU_0_IOUT3 XMC_VADC_REQ_TR_H +#define XMC_ERU_0_IOUT0 XMC_VADC_REQ_TR_M +#define XMC_ERU_0_IOUT1 XMC_VADC_REQ_TR_N +#define XMC_REQ_GT_SEL XMC_VADC_REQ_TR_P #endif @@ -80,57 +87,57 @@ extern "C" { #if (UC_SERIES == XMC12) /* Group request source Gating input connection mappings */ -#define XMC_CCU_40_ST3 XMC_VADC_REQ_GT_A -#define XMC_CCU_40_ST2 XMC_VADC_REQ_GT_B -#define XMC_CCU_40_ST1 XMC_VADC_REQ_GT_C -#define XMC_CCU_40_ST0 XMC_VADC_REQ_GT_D -#define XMC_LEDTS_0_FN XMC_VADC_REQ_GT_I -#define XMC_LEDTS_1_FN XMC_VADC_REQ_GT_J -#define XMC_ERU_0_PDOUT2 XMC_VADC_REQ_GT_K -#define XMC_ERU_0_PDOUT3 XMC_VADC_REQ_GT_L -#define XMC_ERU_0_PDOUT0 XMC_VADC_REQ_GT_O -#define XMC_ERU_0_PDOUT1 XMC_VADC_REQ_GT_P +#define XMC_CCU_40_ST3 XMC_VADC_REQ_GT_A +#define XMC_CCU_40_ST2 XMC_VADC_REQ_GT_B +#define XMC_CCU_40_ST1 XMC_VADC_REQ_GT_C +#define XMC_CCU_40_ST0 XMC_VADC_REQ_GT_D +#define XMC_LEDTS_0_FN XMC_VADC_REQ_GT_I +#define XMC_LEDTS_1_FN XMC_VADC_REQ_GT_J +#define XMC_ERU_0_PDOUT2 XMC_VADC_REQ_GT_K +#define XMC_ERU_0_PDOUT3 XMC_VADC_REQ_GT_L +#define XMC_ERU_0_PDOUT0 XMC_VADC_REQ_GT_O +#define XMC_ERU_0_PDOUT1 XMC_VADC_REQ_GT_P /* Group request source Trigger input connection mappings */ -#define XMC_CCU_40_SR2 XMC_VADC_REQ_TR_A -#define XMC_CCU_40_SR3 XMC_VADC_REQ_TR_B +#define XMC_CCU_40_SR2 XMC_VADC_REQ_TR_A +#define XMC_CCU_40_SR3 XMC_VADC_REQ_TR_B #define XMC_BCCU0_TRIGOUT XMC_VADC_REQ_TR_F #define XMC_ERU_0_IOUT2 XMC_VADC_REQ_TR_G #define XMC_ERU_0_IOUT3 XMC_VADC_REQ_TR_H -#define XMC_ERU_0_IOUT0 XMC_VADC_REQ_TR_M -#define XMC_ERU_0_IOUT1 XMC_VADC_REQ_TR_N -#define XMC_REQ_GT_SEL XMC_VADC_REQ_TR_P +#define XMC_ERU_0_IOUT0 XMC_VADC_REQ_TR_M +#define XMC_ERU_0_IOUT1 XMC_VADC_REQ_TR_N +#define XMC_REQ_GT_SEL XMC_VADC_REQ_TR_P #endif #if (UC_SERIES == XMC13) /* Group request source Gating input connection mappings */ -#define XMC_CCU_40_ST3 XMC_VADC_REQ_GT_A -#define XMC_CCU_40_ST2 XMC_VADC_REQ_GT_B -#define XMC_CCU_40_ST1 XMC_VADC_REQ_GT_C -#define XMC_CCU_40_ST0 XMC_VADC_REQ_GT_D -#define XMC_CCU_80_ST3_A XMC_VADC_REQ_GT_E -#define XMC_CCU_81_ST3 XMC_VADC_REQ_GT_F -#define XMC_ERU_0_PDOUT2 XMC_VADC_REQ_GT_K -#define XMC_ERU_0_PDOUT3 XMC_VADC_REQ_GT_L -#define XMC_CCU_80_ST0 XMC_VADC_REQ_GT_M -#define XMC_CCU_80_ST1 XMC_VADC_REQ_GT_N -#define XMC_ERU_0_PDOUT0 XMC_VADC_REQ_GT_O -#define XMC_ERU_0_PDOUT1 XMC_VADC_REQ_GT_P +#define XMC_CCU_40_ST3 XMC_VADC_REQ_GT_A +#define XMC_CCU_40_ST2 XMC_VADC_REQ_GT_B +#define XMC_CCU_40_ST1 XMC_VADC_REQ_GT_C +#define XMC_CCU_40_ST0 XMC_VADC_REQ_GT_D +#define XMC_CCU_80_ST3_A XMC_VADC_REQ_GT_E +#define XMC_CCU_81_ST3 XMC_VADC_REQ_GT_F +#define XMC_ERU_0_PDOUT2 XMC_VADC_REQ_GT_K +#define XMC_ERU_0_PDOUT3 XMC_VADC_REQ_GT_L +#define XMC_CCU_80_ST0 XMC_VADC_REQ_GT_M +#define XMC_CCU_80_ST1 XMC_VADC_REQ_GT_N +#define XMC_ERU_0_PDOUT0 XMC_VADC_REQ_GT_O +#define XMC_ERU_0_PDOUT1 XMC_VADC_REQ_GT_P /* Group request source Trigger input connection mappings */ -#define XMC_CCU_40_SR2 XMC_VADC_REQ_TR_A -#define XMC_CCU_40_SR3 XMC_VADC_REQ_TR_B +#define XMC_CCU_40_SR2 XMC_VADC_REQ_TR_A +#define XMC_CCU_40_SR3 XMC_VADC_REQ_TR_B #define XMC_BCCU0_TRIGOUT XMC_VADC_REQ_TR_F #define XMC_ERU_0_IOUT2 XMC_VADC_REQ_TR_G #define XMC_ERU_0_IOUT3 XMC_VADC_REQ_TR_H -#define XMC_CCU_80_SR2 XMC_VADC_REQ_TR_I -#define XMC_CCU_80_SR3 XMC_VADC_REQ_TR_J -#define XMC_ERU_0_IOUT0 XMC_VADC_REQ_TR_M -#define XMC_ERU_0_IOUT1 XMC_VADC_REQ_TR_N -#define XMC_POSIF_0_SR1 XMC_VADC_REQ_TR_O -#define XMC_REQ_GT_SEL XMC_VADC_REQ_TR_P +#define XMC_CCU_80_SR2 XMC_VADC_REQ_TR_I +#define XMC_CCU_80_SR3 XMC_VADC_REQ_TR_J +#define XMC_ERU_0_IOUT0 XMC_VADC_REQ_TR_M +#define XMC_ERU_0_IOUT1 XMC_VADC_REQ_TR_N +#define XMC_POSIF_0_SR1 XMC_VADC_REQ_TR_O +#define XMC_REQ_GT_SEL XMC_VADC_REQ_TR_P #endif @@ -138,163 +145,168 @@ extern "C" { #if (UC_SERIES == XMC14) /* Group request source Gating input connection mappings */ -#define XMC_CCU_40_ST3 XMC_VADC_REQ_GT_A -#define XMC_CCU_40_ST2 XMC_VADC_REQ_GT_B -#define XMC_CCU_40_ST1 XMC_VADC_REQ_GT_C -#define XMC_CCU_40_ST0 XMC_VADC_REQ_GT_D -#define XMC_CCU_80_ST3_A XMC_VADC_REQ_GT_E -#define XMC_CCU_81_ST3 XMC_VADC_REQ_GT_F -#define XMC_LEDTS0_FN XMC_VADC_REQ_GT_I -#define XMC_LEDTS1_FN XMC_VADC_REQ_GT_J -#define XMC_ERU_0_PDOUT2 XMC_VADC_REQ_GT_K -#define XMC_ERU_0_PDOUT3 XMC_VADC_REQ_GT_L -#define XMC_CCU_80_ST0 XMC_VADC_REQ_GT_M -#define XMC_CCU_80_ST1 XMC_VADC_REQ_GT_N -#define XMC_ERU_0_PDOUT0 XMC_VADC_REQ_GT_O -#define XMC_ERU_0_PDOUT1 XMC_VADC_REQ_GT_P +#define XMC_CCU_40_ST3 XMC_VADC_REQ_GT_A +#define XMC_CCU_40_ST2 XMC_VADC_REQ_GT_B +#define XMC_CCU_40_ST1 XMC_VADC_REQ_GT_C +#define XMC_CCU_40_ST0 XMC_VADC_REQ_GT_D +#define XMC_CCU_80_ST3_A XMC_VADC_REQ_GT_E +#define XMC_CCU_81_ST3 XMC_VADC_REQ_GT_F +#define XMC_LEDTS0_FN XMC_VADC_REQ_GT_I +#define XMC_LEDTS1_FN XMC_VADC_REQ_GT_J +#define XMC_ERU_0_PDOUT2 XMC_VADC_REQ_GT_K +#define XMC_ERU_0_PDOUT3 XMC_VADC_REQ_GT_L +#define XMC_CCU_80_ST0 XMC_VADC_REQ_GT_M +#define XMC_CCU_80_ST1 XMC_VADC_REQ_GT_N +#define XMC_ERU_0_PDOUT0 XMC_VADC_REQ_GT_O +#define XMC_ERU_0_PDOUT1 XMC_VADC_REQ_GT_P /* Group request source Trigger input connection mappings */ -#define XMC_CCU_40_SR2 XMC_VADC_REQ_TR_A -#define XMC_CCU_40_SR3 XMC_VADC_REQ_TR_B +#define XMC_CCU_40_SR2 XMC_VADC_REQ_TR_A +#define XMC_CCU_40_SR3 XMC_VADC_REQ_TR_B #define XMC_BCCU0_TRIGOUT XMC_VADC_REQ_TR_F #define XMC_ERU_0_IOUT2 XMC_VADC_REQ_TR_G #define XMC_ERU_0_IOUT3 XMC_VADC_REQ_TR_H -#define XMC_CCU_80_SR2 XMC_VADC_REQ_TR_I -#define XMC_CCU_80_SR3 XMC_VADC_REQ_TR_J -#define XMC_ERU_0_IOUT0 XMC_VADC_REQ_TR_M -#define XMC_ERU_0_IOUT1 XMC_VADC_REQ_TR_N -#define XMC_POSIF_0_SR1 XMC_VADC_REQ_TR_O -#define XMC_REQ_GT_SEL XMC_VADC_REQ_TR_P +#define XMC_CCU_80_SR2 XMC_VADC_REQ_TR_I +#define XMC_CCU_80_SR3 XMC_VADC_REQ_TR_J +#define XMC_ERU_0_IOUT0 XMC_VADC_REQ_TR_M +#define XMC_ERU_0_IOUT1 XMC_VADC_REQ_TR_N +#define XMC_POSIF_0_SR1 XMC_VADC_REQ_TR_O +#define XMC_REQ_GT_SEL XMC_VADC_REQ_TR_P #endif -#if ( (UC_SERIES == XMC42)||(UC_SERIES == XMC41) ) +#if ( (UC_SERIES == XMC42)||(UC_SERIES == XMC41) || (UC_SERIES == XMC43) ) /* Group request source Gating input connection mappings */ -#define XMC_CCU_40_ST3 XMC_VADC_REQ_GT_A -#define XMC_CCU_41_ST2 XMC_VADC_REQ_GT_B -#define XMC_CCU_40_SR0 XMC_VADC_REQ_GT_C -#define XMC_CCU_41_SR1 XMC_VADC_REQ_GT_D -#define XMC_CCU_80_ST3_A XMC_VADC_REQ_GT_E -#define XMC_CCU_80_ST3_B XMC_VADC_REQ_GT_F -#define XMC_DAC_0_SGN XMC_VADC_REQ_GT_I -#define XMC_DAC_1_SGN XMC_VADC_REQ_GT_I -#define XMC_LEDTS_FN XMC_VADC_REQ_GT_J -#define XMC_VADC_G0_BLOUT0 XMC_VADC_REQ_GT_K -#define XMC_VADC_G1_BLOUT0 XMC_VADC_REQ_GT_K -#define XMC_VADC_G0_SAMPLE XMC_VADC_REQ_GT_L -#define XMC_VADC_G3_SAMPLE XMC_VADC_REQ_GT_L -#define XMC_CCU_80_SR0 XMC_VADC_REQ_GT_M -#define XMC_CCU_80_SR1 XMC_VADC_REQ_GT_N -#define XMC_ERU_1_PDOUT0 XMC_VADC_REQ_GT_O -#define XMC_ERU_1_PDOUT1 XMC_VADC_REQ_GT_P +#define XMC_CCU_40_ST3 XMC_VADC_REQ_GT_A +#define XMC_CCU_41_ST2 XMC_VADC_REQ_GT_B +#define XMC_CCU_40_SR0 XMC_VADC_REQ_GT_C +#define XMC_CCU_41_SR1 XMC_VADC_REQ_GT_D +#define XMC_CCU_80_ST3_A XMC_VADC_REQ_GT_E +#define XMC_CCU_80_ST3_B XMC_VADC_REQ_GT_F +#define XMC_DAC_0_SGN XMC_VADC_REQ_GT_I +#define XMC_DAC_1_SGN XMC_VADC_REQ_GT_I +#define XMC_LEDTS_FN XMC_VADC_REQ_GT_J +#define XMC_VADC_G0_BLOUT0 XMC_VADC_REQ_GT_K +#define XMC_VADC_G1_BLOUT0 XMC_VADC_REQ_GT_K +#define XMC_VADC_G0_SAMPLE XMC_VADC_REQ_GT_L +#define XMC_VADC_G1_SAMPLE XMC_VADC_REQ_GT_L +#define XMC_CCU_80_SR0 XMC_VADC_REQ_GT_M +#define XMC_CCU_80_SR1 XMC_VADC_REQ_GT_N +#define XMC_ERU_1_PDOUT0 XMC_VADC_REQ_GT_O +#define XMC_ERU_1_PDOUT1 XMC_VADC_REQ_GT_P /* Group request source Trigger input connection mappings */ -#define XMC_CCU_40_SR2 XMC_VADC_REQ_TR_A -#define XMC_CCU_40_SR3 XMC_VADC_REQ_TR_B -#define XMC_CCU_41_SR2 XMC_VADC_REQ_TR_C -#define XMC_CCU_41_SR3 XMC_VADC_REQ_TR_D -#define XMC_CCU_80_SR2 XMC_VADC_REQ_TR_I -#define XMC_CCU_80_SR3 XMC_VADC_REQ_TR_J -#define XMC_ERU_1_IOUT0 XMC_VADC_REQ_TR_M -#define XMC_ERU_1_IOUT1 XMC_VADC_REQ_TR_N -#define XMC_POSIF_0_SR1 XMC_VADC_REQ_TR_O -#define XMC_REQ_GT_SEL XMC_VADC_REQ_TR_P +#define XMC_CCU_40_SR2 XMC_VADC_REQ_TR_A +#define XMC_CCU_40_SR3 XMC_VADC_REQ_TR_B +#define XMC_CCU_41_SR2 XMC_VADC_REQ_TR_C +#define XMC_CCU_41_SR3 XMC_VADC_REQ_TR_D +#define XMC_CCU_80_SR2 XMC_VADC_REQ_TR_I +#define XMC_CCU_80_SR3 XMC_VADC_REQ_TR_J +#define XMC_ERU_1_IOUT0 XMC_VADC_REQ_TR_M +#define XMC_ERU_1_IOUT1 XMC_VADC_REQ_TR_N +#if (UC_SERIES == XMC43) +#define XMC_ERU_1_IOUT2 XMC_VADC_REQ_TR_N +#endif +#if (UC_SERIES != XMC43) +#define XMC_POSIF_0_SR1 XMC_VADC_REQ_TR_O +#endif +#define XMC_REQ_GT_SEL XMC_VADC_REQ_TR_P #endif #if ( UC_SERIES == XMC44 ) || ( UC_SERIES == XMC48) /* Group request source Gating input connection mappings */ -#define XMC_CCU_40_ST3 XMC_VADC_REQ_GT_A -#define XMC_CCU_41_ST2 XMC_VADC_REQ_GT_B -#define XMC_CCU_40_SR0 XMC_VADC_REQ_GT_C -#define XMC_CCU_41_SR1 XMC_VADC_REQ_GT_D -#define XMC_CCU_80_ST3_A XMC_VADC_REQ_GT_E -#define XMC_CCU_80_ST3_B XMC_VADC_REQ_GT_F -#define XMC_CCU_81_ST3_A XMC_VADC_REQ_GT_G -#define XMC_CCU_81_ST3_B XMC_VADC_REQ_GT_H -#define XMC_DAC_0_SGN XMC_VADC_REQ_GT_I -#define XMC_DAC_1_SGN XMC_VADC_REQ_GT_I -#define XMC_LEDTS_FN XMC_VADC_REQ_GT_J -#define XMC_VADC_G0_BLOUT0 XMC_VADC_REQ_GT_K -#define XMC_VADC_G1_BLOUT0 XMC_VADC_REQ_GT_K -#define XMC_VADC_G2_BLOUT0 XMC_VADC_REQ_GT_K -#define XMC_VADC_G3_BLOUT0 XMC_VADC_REQ_GT_K -#define XMC_VADC_G0_SAMPLE XMC_VADC_REQ_GT_L -#define XMC_VADC_G1_SAMPLE XMC_VADC_REQ_GT_L -#define XMC_VADC_G2_SAMPLE XMC_VADC_REQ_GT_L -#define XMC_VADC_G3_SAMPLE XMC_VADC_REQ_GT_L -#define XMC_CCU_80_SR0 XMC_VADC_REQ_GT_M -#define XMC_CCU_80_SR1 XMC_VADC_REQ_GT_N -#define XMC_ERU_1_PDOUT0 XMC_VADC_REQ_GT_O -#define XMC_ERU_1_PDOUT1 XMC_VADC_REQ_GT_P +#define XMC_CCU_40_ST3 XMC_VADC_REQ_GT_A +#define XMC_CCU_41_ST2 XMC_VADC_REQ_GT_B +#define XMC_CCU_40_SR0 XMC_VADC_REQ_GT_C +#define XMC_CCU_41_SR1 XMC_VADC_REQ_GT_D +#define XMC_CCU_80_ST3_A XMC_VADC_REQ_GT_E +#define XMC_CCU_80_ST3_B XMC_VADC_REQ_GT_F +#define XMC_CCU_81_ST3_A XMC_VADC_REQ_GT_G +#define XMC_CCU_81_ST3_B XMC_VADC_REQ_GT_H +#define XMC_DAC_0_SGN XMC_VADC_REQ_GT_I +#define XMC_DAC_1_SGN XMC_VADC_REQ_GT_I +#define XMC_LEDTS_FN XMC_VADC_REQ_GT_J +#define XMC_VADC_G0_BLOUT0 XMC_VADC_REQ_GT_K +#define XMC_VADC_G1_BLOUT0 XMC_VADC_REQ_GT_K +#define XMC_VADC_G2_BLOUT0 XMC_VADC_REQ_GT_K +#define XMC_VADC_G3_BLOUT0 XMC_VADC_REQ_GT_K +#define XMC_VADC_G0_SAMPLE XMC_VADC_REQ_GT_L +#define XMC_VADC_G1_SAMPLE XMC_VADC_REQ_GT_L +#define XMC_VADC_G2_SAMPLE XMC_VADC_REQ_GT_L +#define XMC_VADC_G3_SAMPLE XMC_VADC_REQ_GT_L +#define XMC_CCU_80_SR0 XMC_VADC_REQ_GT_M +#define XMC_CCU_80_SR1 XMC_VADC_REQ_GT_N +#define XMC_ERU_1_PDOUT0 XMC_VADC_REQ_GT_O +#define XMC_ERU_1_PDOUT1 XMC_VADC_REQ_GT_P /* Group request source Trigger input connection mappings */ -#define XMC_CCU_40_SR2 XMC_VADC_REQ_TR_A -#define XMC_CCU_40_SR3 XMC_VADC_REQ_TR_B -#define XMC_CCU_41_SR2 XMC_VADC_REQ_TR_C -#define XMC_CCU_41_SR3 XMC_VADC_REQ_TR_D -#define XMC_CCU_42_SR3 XMC_VADC_REQ_TR_E +#define XMC_CCU_40_SR2 XMC_VADC_REQ_TR_A +#define XMC_CCU_40_SR3 XMC_VADC_REQ_TR_B +#define XMC_CCU_41_SR2 XMC_VADC_REQ_TR_C +#define XMC_CCU_41_SR3 XMC_VADC_REQ_TR_D +#define XMC_CCU_42_SR3 XMC_VADC_REQ_TR_E #define XMC_CCU_43_SR3 XMC_VADC_REQ_TR_F -#define XMC_CCU_80_SR2 XMC_VADC_REQ_TR_I -#define XMC_CCU_80_SR3 XMC_VADC_REQ_TR_J -#define XMC_CCU_81_SR2 XMC_VADC_REQ_TR_K -#define XMC_CCU_81_SR3 XMC_VADC_REQ_TR_L -#define XMC_ERU_1_IOUT0 XMC_VADC_REQ_TR_M -#define XMC_ERU_1_IOUT1 XMC_VADC_REQ_TR_N -#define XMC_ERU_1_IOUT2 XMC_VADC_REQ_TR_N -#define XMC_POSIF_0_SR1 XMC_VADC_REQ_TR_O -#define XMC_POSIF_1_SR1 XMC_VADC_REQ_TR_O -#define XMC_REQ_GT_SEL XMC_VADC_REQ_TR_P +#define XMC_CCU_80_SR2 XMC_VADC_REQ_TR_I +#define XMC_CCU_80_SR3 XMC_VADC_REQ_TR_J +#define XMC_CCU_81_SR2 XMC_VADC_REQ_TR_K +#define XMC_CCU_81_SR3 XMC_VADC_REQ_TR_L +#define XMC_ERU_1_IOUT0 XMC_VADC_REQ_TR_M +#define XMC_ERU_1_IOUT1 XMC_VADC_REQ_TR_N +#define XMC_ERU_1_IOUT2 XMC_VADC_REQ_TR_N +#define XMC_POSIF_0_SR1 XMC_VADC_REQ_TR_O +#define XMC_POSIF_1_SR1 XMC_VADC_REQ_TR_O +#define XMC_REQ_GT_SEL XMC_VADC_REQ_TR_P #endif #if ( UC_SERIES == XMC45 ) /* Group request source Gating input connection mappings */ -#define XMC_CCU_40_ST3 XMC_VADC_REQ_GT_A -#define XMC_CCU_41_ST2 XMC_VADC_REQ_GT_B -#define XMC_CCU_40_SR0 XMC_VADC_REQ_GT_C -#define XMC_CCU_41_SR1 XMC_VADC_REQ_GT_D -#define XMC_CCU_80_ST3_A XMC_VADC_REQ_GT_E -#define XMC_CCU_80_ST3_B XMC_VADC_REQ_GT_F -#define XMC_CCU_81_ST3_A XMC_VADC_REQ_GT_G -#define XMC_CCU_81_ST3_B XMC_VADC_REQ_GT_H -#define XMC_DAC_0_SGN XMC_VADC_REQ_GT_I -#define XMC_DAC_1_SGN XMC_VADC_REQ_GT_I -#define XMC_LEDTS_FN XMC_VADC_REQ_GT_J -#define XMC_VADC_G0_BLOUT0 XMC_VADC_REQ_GT_K -#define XMC_VADC_G1_BLOUT0 XMC_VADC_REQ_GT_K -#define XMC_VADC_G2_BLOUT0 XMC_VADC_REQ_GT_K -#define XMC_VADC_G3_BLOUT0 XMC_VADC_REQ_GT_K -#define XMC_VADC_G0_SAMPLE XMC_VADC_REQ_GT_L -#define XMC_VADC_G1_SAMPLE XMC_VADC_REQ_GT_L -#define XMC_VADC_G2_SAMPLE XMC_VADC_REQ_GT_L -#define XMC_VADC_G3_SAMPLE XMC_VADC_REQ_GT_L -#define XMC_CCU_80_SR0 XMC_VADC_REQ_GT_M -#define XMC_CCU_80_SR1 XMC_VADC_REQ_GT_N -#define XMC_ERU_1_PDOUT0 XMC_VADC_REQ_GT_O -#define XMC_ERU_1_PDOUT1 XMC_VADC_REQ_GT_P +#define XMC_CCU_40_ST3 XMC_VADC_REQ_GT_A +#define XMC_CCU_41_ST2 XMC_VADC_REQ_GT_B +#define XMC_CCU_40_SR0 XMC_VADC_REQ_GT_C +#define XMC_CCU_41_SR1 XMC_VADC_REQ_GT_D +#define XMC_CCU_80_ST3_A XMC_VADC_REQ_GT_E +#define XMC_CCU_80_ST3_B XMC_VADC_REQ_GT_F +#define XMC_CCU_81_ST3_A XMC_VADC_REQ_GT_G +#define XMC_CCU_81_ST3_B XMC_VADC_REQ_GT_H +#define XMC_DAC_0_SGN XMC_VADC_REQ_GT_I +#define XMC_DAC_1_SGN XMC_VADC_REQ_GT_I +#define XMC_LEDTS_FN XMC_VADC_REQ_GT_J +#define XMC_VADC_G0_BLOUT0 XMC_VADC_REQ_GT_K +#define XMC_VADC_G1_BLOUT0 XMC_VADC_REQ_GT_K +#define XMC_VADC_G2_BLOUT0 XMC_VADC_REQ_GT_K +#define XMC_VADC_G3_BLOUT0 XMC_VADC_REQ_GT_K +#define XMC_VADC_G0_SAMPLE XMC_VADC_REQ_GT_L +#define XMC_VADC_G1_SAMPLE XMC_VADC_REQ_GT_L +#define XMC_VADC_G2_SAMPLE XMC_VADC_REQ_GT_L +#define XMC_VADC_G3_SAMPLE XMC_VADC_REQ_GT_L +#define XMC_CCU_80_SR0 XMC_VADC_REQ_GT_M +#define XMC_CCU_80_SR1 XMC_VADC_REQ_GT_N +#define XMC_ERU_1_PDOUT0 XMC_VADC_REQ_GT_O +#define XMC_ERU_1_PDOUT1 XMC_VADC_REQ_GT_P /* Group request source Trigger input connection mappings */ -#define XMC_CCU_40_SR2 XMC_VADC_REQ_TR_A -#define XMC_CCU_40_SR3 XMC_VADC_REQ_TR_B -#define XMC_CCU_41_SR2 XMC_VADC_REQ_TR_C -#define XMC_CCU_41_SR3 XMC_VADC_REQ_TR_D -#define XMC_CCU_42_SR3 XMC_VADC_REQ_TR_E +#define XMC_CCU_40_SR2 XMC_VADC_REQ_TR_A +#define XMC_CCU_40_SR3 XMC_VADC_REQ_TR_B +#define XMC_CCU_41_SR2 XMC_VADC_REQ_TR_C +#define XMC_CCU_41_SR3 XMC_VADC_REQ_TR_D +#define XMC_CCU_42_SR3 XMC_VADC_REQ_TR_E #define XMC_CCU_43_SR3 XMC_VADC_REQ_TR_F -#define XMC_CCU_80_SR2 XMC_VADC_REQ_TR_I -#define XMC_CCU_80_SR3 XMC_VADC_REQ_TR_J -#define XMC_CCU_81_SR2 XMC_VADC_REQ_TR_K -#define XMC_CCU_81_SR3 XMC_VADC_REQ_TR_L -#define XMC_ERU_1_IOUT0 XMC_VADC_REQ_TR_M -#define XMC_ERU_1_IOUT1 XMC_VADC_REQ_TR_N -#define XMC_ERU_1_IOUT2 XMC_VADC_REQ_TR_N -#define XMC_POSIF_0_SR1 XMC_VADC_REQ_TR_O -#define XMC_POSIF_1_SR1 XMC_VADC_REQ_TR_O -#define XMC_REQ_GT_SEL XMC_VADC_REQ_TR_P +#define XMC_CCU_80_SR2 XMC_VADC_REQ_TR_I +#define XMC_CCU_80_SR3 XMC_VADC_REQ_TR_J +#define XMC_CCU_81_SR2 XMC_VADC_REQ_TR_K +#define XMC_CCU_81_SR3 XMC_VADC_REQ_TR_L +#define XMC_ERU_1_IOUT0 XMC_VADC_REQ_TR_M +#define XMC_ERU_1_IOUT1 XMC_VADC_REQ_TR_N +#define XMC_ERU_1_IOUT2 XMC_VADC_REQ_TR_N +#define XMC_POSIF_0_SR1 XMC_VADC_REQ_TR_O +#define XMC_POSIF_1_SR1 XMC_VADC_REQ_TR_O +#define XMC_REQ_GT_SEL XMC_VADC_REQ_TR_P #endif diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_wdt.h b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_wdt.h index 92947168..856178c5 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_wdt.h +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/inc/xmc_wdt.h @@ -1,12 +1,12 @@ /** * @file xmc_wdt.h - * @date 2015-10-27 + * @date 2015-08-06 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_eru.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_eru.c index 82a1fe3e..efd5590e 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_eru.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_eru.c @@ -1,12 +1,12 @@ /** * @file xmc4_eru.c - * @date 2015-10-27 + * @date 2015-02-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_flash.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_flash.c index a3f181b8..4dbd005b 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_flash.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_flash.c @@ -1,12 +1,12 @@ /** * @file xmc4_flash.c - * @date 2015-10-27 + * @date 2016-01-08 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -49,6 +49,17 @@ * 3. XMC_FLASH_EraseUCB * 4. XMC_FLASH_ResumeProtection * 5. XMC_FLASH_RepairPhysicalSector + * + * 2016-01-08: + * - Wait until operation is finished for the next functions: + * 1. XMC_FLASH_InstallProtection + * 2. XMC_FLASH_ConfirmProtection + * 3. XMC_FLASH_ProgramPage + * 4. XMC_FLASH_EraseSector + * 5. XMC_FLASH_ErasePhysicalSector + * 6. XMC_FLASH_EraseUCB + * - Fix XMC_FLASH_VerifyReadProtection and XMC_FLASH_VerifyWriteProtection + * * @endcond * */ @@ -63,13 +74,23 @@ #define XMC_FLASH_PROTECTION_CONFIGURATION_WORDS (8UL) /* Used to upadte the assembly buffer during protection configuration */ -#define XMC_FLASH_PROTECTION_CONFIRMATION_OFFSET (512UL) /* Offset address for UCB page */ -#define XMC_FLASH_PROTECTION_CONFIRMATION_WORDS (4UL) -#define XMC_FLASH_PROTECTION_CONFIRMATION_CODE (0x8AFE15C3UL) +#define XMC_FLASH_PROT_CONFIRM_OFFSET (512UL) /* Offset address for UCB page */ +#define XMC_FLASH_PROT_CONFIRM_WORDS (4UL) +#define XMC_FLASH_PROT_CONFIRM_CODE (0x8AFE15C3UL) /********************************************************************************************************************* * LOCAL FUNCTIONS ********************************************************************************************************************/ +void XMC_FLASH_lEnterPageModeCommand(void); +void XMC_FLASH_lLoadPageCommand(uint32_t low_word, uint32_t high_word); +void XMC_FLASH_lWritePageCommand(uint32_t *page_start_address); +void XMC_FLASH_lWriteUCBPageCommand(uint32_t *page_start_address); +void XMC_FLASH_lEraseSectorCommand(uint32_t *sector_start_address); +void XMC_FLASH_lDisableSectorWriteProtectionCommand(uint32_t user, uint32_t password_0, uint32_t password_1); +void XMC_FLASH_lDisableReadProtectionCommand(uint32_t password_0, uint32_t password_1); +void XMC_FLASH_lRepairPhysicalSectorCommand(void); +void XMC_FLASH_lErasePhysicalSectorCommand(uint32_t *sector_start_address); +void XMC_FLASH_lClearStatusCommand(void); /* * Command to program the PFLASH in to page mode, so that assembly buffer is used @@ -79,7 +100,7 @@ void XMC_FLASH_lEnterPageModeCommand(void) volatile uint32_t *address; address = (uint32_t *)(XMC_FLASH_UNCACHED_BASE + 0x5554U); - *address = 0x50; + *address = (uint32_t)0x50U; } /* @@ -247,17 +268,20 @@ void XMC_FLASH_DisableEvent(const uint32_t event_msk) */ void XMC_FLASH_ProgramPage(uint32_t *address, const uint32_t *data) { - uint32_t index; + uint32_t idx; XMC_FLASH_lClearStatusCommand(); XMC_FLASH_lEnterPageModeCommand(); - for (index = 0; index < XMC_FLASH_WORDS_PER_PAGE; index += 2) + for (idx = 0U; idx < XMC_FLASH_WORDS_PER_PAGE; idx += 2U) { - XMC_FLASH_lLoadPageCommand(data[index], data[index + 1]); + XMC_FLASH_lLoadPageCommand(data[idx], data[idx + 1U]); } XMC_FLASH_lWritePageCommand(address); + + /* wait until the operation is completed */ + while ((FLASH0->FSR & (uint32_t)FLASH_FSR_PBUSY_Msk) != 0U){} } /* @@ -267,6 +291,9 @@ void XMC_FLASH_EraseSector(uint32_t *address) { XMC_FLASH_lClearStatusCommand(); XMC_FLASH_lEraseSectorCommand(address); + + /* wait until the operation is completed */ + while ((FLASH0->FSR & (uint32_t)FLASH_FSR_PBUSY_Msk) != 0U){} } /* @@ -319,6 +346,9 @@ void XMC_FLASH_ErasePhysicalSector(uint32_t *address) { XMC_FLASH_lClearStatusCommand(); XMC_FLASH_lErasePhysicalSectorCommand(address); + + /* wait until the operation is completed */ + while ((FLASH0->FSR & (uint32_t)FLASH_FSR_PBUSY_Msk) != 0U){} } /* @@ -349,6 +379,9 @@ void XMC_FLASH_EraseUCB(uint32_t *ucb_sector_start_address) *address = 0x55U; address = ucb_sector_start_address; *address = 0xc0U; + + /* wait until the operation is completed */ + while ((FLASH0->FSR & (uint32_t)FLASH_FSR_PBUSY_Msk) != 0U){} } /* @@ -370,9 +403,9 @@ void XMC_FLASH_InstallProtection(uint8_t user, uint32_t password_0, uint32_t password_1) { - uint32_t index; + uint32_t idx; - XMC_ASSERT(" XMC_FLASH_ConfigureProtection: User level out of range", (user < 3U)); + XMC_ASSERT(" XMC_FLASH_ConfigureProtection: User level out of range", (user < 3U)) XMC_FLASH_lEnterPageModeCommand(); @@ -381,12 +414,15 @@ void XMC_FLASH_InstallProtection(uint8_t user, XMC_FLASH_lLoadPageCommand(password_0, password_1); XMC_FLASH_lLoadPageCommand(password_0, password_1); - for (index = 0; index < (XMC_FLASH_WORDS_PER_PAGE - XMC_FLASH_PROTECTION_CONFIGURATION_WORDS); index += 2) + for (idx = 0U; idx < (XMC_FLASH_WORDS_PER_PAGE - XMC_FLASH_PROTECTION_CONFIGURATION_WORDS); idx += 2U) { XMC_FLASH_lLoadPageCommand(0UL, 0UL); } XMC_FLASH_lWriteUCBPageCommand((uint32_t *)((uint32_t)XMC_FLASH_UCB0 + (user * XMC_FLASH_BYTES_PER_UCB))); + + /* wait until the operation is completed */ + while ((FLASH0->FSR & (uint32_t)FLASH_FSR_PBUSY_Msk) != 0U){} } /* @@ -394,23 +430,26 @@ void XMC_FLASH_InstallProtection(uint8_t user, */ void XMC_FLASH_ConfirmProtection(uint8_t user) { - uint32_t index; + uint32_t idx; - XMC_ASSERT(" XMC_FLASH_ConfirmProtection: User level out of range", (user < 3U)); + XMC_ASSERT(" XMC_FLASH_ConfirmProtection: User level out of range", (user < 3U)) XMC_FLASH_lEnterPageModeCommand(); - XMC_FLASH_lLoadPageCommand(XMC_FLASH_PROTECTION_CONFIRMATION_CODE, 0U); - XMC_FLASH_lLoadPageCommand(XMC_FLASH_PROTECTION_CONFIRMATION_CODE, 0U); + XMC_FLASH_lLoadPageCommand(XMC_FLASH_PROT_CONFIRM_CODE, 0U); + XMC_FLASH_lLoadPageCommand(XMC_FLASH_PROT_CONFIRM_CODE, 0U); /* Fill the rest of page buffer with zeros*/ - for (index = 0UL; index < (XMC_FLASH_WORDS_PER_PAGE - XMC_FLASH_PROTECTION_CONFIRMATION_WORDS); index += 2) + for (idx = 0UL; idx < (XMC_FLASH_WORDS_PER_PAGE - XMC_FLASH_PROT_CONFIRM_WORDS); idx += 2U) { XMC_FLASH_lLoadPageCommand(0UL, 0UL); } XMC_FLASH_lWriteUCBPageCommand((uint32_t *)((uint32_t)XMC_FLASH_UCB0 + - (user * XMC_FLASH_BYTES_PER_UCB) + XMC_FLASH_PROTECTION_CONFIRMATION_OFFSET)); + (user * XMC_FLASH_BYTES_PER_UCB) + XMC_FLASH_PROT_CONFIRM_OFFSET)); + + /* wait until the operation is completed */ + while ((FLASH0->FSR & (uint32_t)FLASH_FSR_PBUSY_Msk) != 0U){} } /* @@ -418,11 +457,18 @@ void XMC_FLASH_ConfirmProtection(uint8_t user) */ bool XMC_FLASH_VerifyReadProtection(uint32_t password_0, uint32_t password_1) { - XMC_FLASH_lClearStatusCommand(); - XMC_FLASH_lDisableReadProtectionCommand(password_0, password_1); + bool status = false; + + /* Check if read protection is installed */ + if ((XMC_FLASH_GetStatus() & (uint32_t)XMC_FLASH_STATUS_READ_PROTECTION_INSTALLED) != 0U) + { + XMC_FLASH_lClearStatusCommand(); + XMC_FLASH_lDisableReadProtectionCommand(password_0, password_1); - return (bool)((XMC_FLASH_GetStatus() & XMC_FLASH_STATUS_READ_PROTECTION_INSTALLED) && - (FLASH0->PROCON0 & XMC_FLASH_PROTECTION_READ_GLOBAL)); + status = (bool)(XMC_FLASH_GetStatus() & (uint32_t)XMC_FLASH_STATUS_READ_PROTECTION_DISABLED_STATE); + } + + return status; } /* @@ -434,17 +480,22 @@ bool XMC_FLASH_VerifyWriteProtection(uint32_t user, uint32_t password_0, uint32_t password_1) { - uint32_t *flash_procon_ptr; + bool status = false; + uint32_t *flash_procon_ptr = (uint32_t *)(void*)(&(FLASH0->PROCON0) + user); - XMC_ASSERT(" XMC_FLASH_VerifyWriteProtection: User level out of range", (user < 3U)); + XMC_ASSERT(" XMC_FLASH_VerifyWriteProtection: User level out of range", (user < 2U)) - flash_procon_ptr = (uint32_t *)(&(FLASH0->PROCON0) + user); + /* Check if write protection for selected user is installed */ + if ((XMC_FLASH_GetStatus() & (uint32_t)((uint32_t)1U << (uint32_t)((uint32_t)FLASH_FSR_WPROIN0_Pos + user))) != 0U) + { + XMC_FLASH_lClearStatusCommand(); + XMC_FLASH_lDisableSectorWriteProtectionCommand(user, password_0, password_1); + + status = (bool)((XMC_FLASH_GetStatus() & (uint32_t)((uint32_t)1U << (uint32_t)((uint32_t)FLASH_FSR_WPRODIS0_Pos + user)))) && + (*flash_procon_ptr == (protection_mask & (uint32_t)(~(uint32_t)XMC_FLASH_PROTECTION_READ_GLOBAL))); + } - XMC_FLASH_lClearStatusCommand(); - XMC_FLASH_lDisableSectorWriteProtectionCommand(user, password_0, password_1); - - return (bool)((XMC_FLASH_GetStatus() & (1U << (FLASH_FSR_WPRODIS0_Pos + user))) && - (*flash_procon_ptr == (protection_mask & ~XMC_FLASH_PROTECTION_READ_GLOBAL))); + return status; } /* diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_gpio.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_gpio.c index 2d825083..4d686761 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_gpio.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_gpio.c @@ -1,12 +1,12 @@ /** * @file xmc4_gpio.c - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_rtc.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_rtc.c index 2d4fbc34..94383a98 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_rtc.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_rtc.c @@ -1,12 +1,12 @@ /** * @file xmc4_rtc.c - * @date 2015-10-27 + * @date 2016-03-09 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -39,6 +39,9 @@ * 2015-02-20: * - Initial
* + * 2016-03-09: + * - Optimize write only registers + * * @endcond * */ @@ -161,7 +164,7 @@ void XMC_RTC_ClearEvent(const uint32_t event) { /* check SCU_MIRRSTS to ensure that no transfer over serial interface is pending */ } - RTC->CLRSR |= event; + RTC->CLRSR = event; } #endif /* UC_FAMILY == XMC4 */ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_scu.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_scu.c index e6924c29..19439157 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_scu.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc4_scu.c @@ -1,12 +1,12 @@ /** * @file xmc4_scu.c - * @date 2015-10-27 + * @date 2016-06-15 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -48,6 +48,43 @@ * - XMC_SCU_INTERRUPT_TriggerEvent,XMC_SCU_INTERUPT_GetEventStatus, * - XMC_SCU_INTERRUPT_ClearEventStatus are added * - Added Weak implementation for OSCHP_GetFrequency() + * + * 2015-11-30: + * - Documentation improved
+ * - Following API functionalities are improved + * XMC_SCU_CLOCK_GatePeripheralClock, XMC_SCU_CLOCK_UngatePeripheralClock, XMC_SCU_CLOCK_IsPeripheralClockGated + * XMC_SCU_RESET_AssertPeripheralReset, XMC_SCU_RESET_DeassertPeripheralReset, XMC_SCU_RESET_IsPeripheralResetAsserted + * + * 2015-12-08: + * - XMC_SCU_GetTemperature renamed to XMC_SCU_GetTemperatureMeasurement + * + * 2016-03-09: + * - Optimize write only registers + * - Added XMC_SCU_HIB_SetPinMode + * - Added XMC_SCU_HIB_GetHibernateControlStatus, + * XMC_SCU_HIB_GetEventStatus, XMC_SCU_HIB_ClearEventStatus, XMC_SCU_HIB_TriggerEvent, + * XMC_SCU_HIB_EnableEvent, XMC_SCU_HIB_DisableEvent + * - Added XMC_SCU_HIB_SetWakeupTriggerInput, XMC_SCU_HIB_SetPinMode, XMC_SCU_HIB_SetOutputPinLevel, + * XMC_SCU_HIB_SetInput0, XMC_SCU_HIB_EnterHibernateState + * + * 2016-04-06: + * - Fixed XMC_SCU_ReadFromRetentionMemory functionality + * + * 2016-05-19: + * - Changed XMC_SCU_CLOCK_StartSystemPll to avoid using floating point calculation which might have an impact on interrupt latency if ISR uses also the FPU + * - Added XMC_SCU_CLOCK_IsLowPowerOscillatorStable() and XMC_SCU_CLOCK_IsHighPerformanceOscillatorStable() + * - Added XMC_SCU_CLOCK_EnableLowPowerOscillatorGeneralPurposeInput(), + * XMC_SCU_CLOCK_DisableLowPowerOscillatorGeneralPurposeInput(), + * XMC_SCU_CLOCK_GetLowPowerOscillatorGeneralPurposeInputStatus() + * - Added XMC_SCU_CLOCK_EnableHighPerformanceOscillatorGeneralPurposeInput(), + * XMC_SCU_CLOCK_DisableHighPerformanceOscillatorGeneralPurposeInput(), + * XMC_SCU_CLOCK_GetHighPerformanceOscillatorGeneralPurposeInputStatus() + * + * 2016-06-15: + * - Added XMC_SCU_HIB_EnterHibernateStateEx() which allows to select between external or internal hibernate mode. This last mode only available in XMC44, XMC42 and XMC41 series. + * - Extended wakeup hibernate events using LPAC wakeup on events. Only available in XMC44, XMC42 and XMC41 series + * - Added LPAC APIs. Only available in XMC44, XMC42 and XMC41 series. + * * @endcond * */ @@ -85,24 +122,25 @@ /********************************************************************************************************************* * MACROS ********************************************************************************************************************/ -#define FOSCREF (2500000UL) -#define FREQ_1MHZ (1000000UL) +#define FOSCREF (2500000UL) /**< Oscillator reference frequency (fOSCREF) monitored by Oscillator watchdog */ +#define FREQ_1MHZ (1000000UL) /**< Used during calculation. */ #ifndef OFI_FREQUENCY -#define OFI_FREQUENCY (24000000UL) +#define OFI_FREQUENCY (24000000UL) /**< Fast internal backup clock source. */ #endif #ifndef OSI_FREQUENCY -#define OSI_FREQUENCY (32768UL) +#define OSI_FREQUENCY (32768UL) /**< Internal slow clock source. */ #endif #ifndef OSCHP_FREQUENCY -#define OSCHP_FREQUENCY (12000000U) +#define OSCHP_FREQUENCY (12000000U) /**< External crystal High Precision Oscillator. */ #endif #define XMC_SCU_PLL_PLLSTAT_OSC_USABLE (SCU_PLL_PLLSTAT_PLLHV_Msk | \ SCU_PLL_PLLSTAT_PLLLV_Msk | \ - SCU_PLL_PLLSTAT_PLLSP_Msk) + SCU_PLL_PLLSTAT_PLLSP_Msk) /**< Used to verify the OSC frequency is + usable or not.*/ #define XMC_SCU_ORC_ADC_START_GROUP (0UL) /**< The ADC group whose channel input is compared by Out of Range Comparator (ORC) to serves the purpose of overvoltage monitoring @@ -133,29 +171,40 @@ within specified ADC start and end channel number or not. */ -#define XMC_SCU_INTERRUPT_EVENT_MAX (32U) +#define XMC_SCU_INTERRUPT_EVENT_MAX (32U) /**< Maximum supported SCU events. */ + +#define SCU_HIBERNATE_HDCR_HIBIOSEL_Size (4U) + +#define SCU_HIBERNATE_OSCULCTRL_MODE_OSC_POWER_DOWN (0x2U) + +#define XMC_SCU_POWER_LSB13V (0.0058F) +#define XMC_SCU_POWER_LSB33V (0.0225F) /********************************************************************************************************************* * LOCAL DATA ********************************************************************************************************************/ -XMC_SCU_INTERRUPT_EVENT_HANDLER_t event_handler_list[XMC_SCU_INTERRUPT_EVENT_MAX]; +XMC_SCU_INTERRUPT_EVENT_HANDLER_t event_handler_list[XMC_SCU_INTERRUPT_EVENT_MAX]; /**< For registering callback + functions on SCU event + occurrence. */ /********************************************************************************************************************* * LOCAL ROUTINES ********************************************************************************************************************/ #if defined(UC_ID) +/* This is a non-weak function, which retrieves high precision external oscillator frequency. */ __WEAK uint32_t OSCHP_GetFrequency(void) { return (OSCHP_FREQUENCY); } #endif +/* This is a local function used to generate the delay until register get updated with new configured value. */ static void XMC_SCU_lDelay(uint32_t cycles); /********************************************************************************************************************* * API IMPLEMENTATION ********************************************************************************************************************/ - +/* This is a local function used to generate the delay until register get updated with new configured value. */ void XMC_SCU_lDelay(uint32_t delay) { uint32_t i; @@ -196,7 +245,7 @@ XMC_SCU_INTERRUPT_EVENT_t XMC_SCU_INTERUPT_GetEventStatus(void) /* API to clear the SCU event status */ void XMC_SCU_INTERRUPT_ClearEventStatus(const XMC_SCU_INTERRUPT_EVENT_t event) { - SCU_INTERRUPT->SRCLR |= (uint32_t)event; + SCU_INTERRUPT->SRCLR = (uint32_t)event; } @@ -250,22 +299,25 @@ void XMC_SCU_CalibrateTemperatureSensor(uint32_t offset, uint32_t gain) (uint32_t)(0x4UL << SCU_GENERAL_DTSCON_REFTRIM_Pos) | (uint32_t)(0x8UL << SCU_GENERAL_DTSCON_BGTRIM_Pos)); } - +/* API to enable die temperature measurement by powering the DTS module. */ void XMC_SCU_EnableTemperatureSensor(void) { SCU_GENERAL->DTSCON &= (uint32_t)~(SCU_GENERAL_DTSCON_PWD_Msk); } +/* API to disable die temperature measurement by powering the DTS module off. */ void XMC_SCU_DisableTemperatureSensor(void) { SCU_GENERAL->DTSCON |= (uint32_t)SCU_GENERAL_DTSCON_PWD_Msk; } +/* API to provide the die temperature sensor power status. */ bool XMC_SCU_IsTemperatureSensorEnabled(void) { return ((SCU_GENERAL->DTSCON & SCU_GENERAL_DTSCON_PWD_Msk) == 0U); } +/* API to check if the die temperature sensor is ready to start a measurement. */ bool XMC_SCU_IsTemperatureSensorReady(void) { return ((SCU_GENERAL->DTSSTAT & SCU_GENERAL_DTSSTAT_RDY_Msk) != 0U); @@ -292,7 +344,7 @@ XMC_SCU_STATUS_t XMC_SCU_StartTemperatureMeasurement(void) } /* API to retrieve the temperature measured */ -uint32_t XMC_SCU_GetTemperature(void) +uint32_t XMC_SCU_GetTemperatureMeasurement(void) { uint32_t temperature; @@ -315,8 +367,8 @@ bool XMC_SCU_IsTemperatureSensorBusy(void) } -/* API to determine if device temperature has gone past the ceiling */ #if defined(SCU_GENERAL_DTEMPLIM_LOWER_Msk) && defined(SCU_GENERAL_DTEMPLIM_UPPER_Msk) +/* API to determine if device temperature has gone past the ceiling */ bool XMC_SCU_HighTemperature(void) { bool ret_val; @@ -430,7 +482,7 @@ uint32_t XMC_SCU_ReadFromRetentionMemory(uint32_t address) rmacr = ((uint32_t)(address << SCU_GENERAL_RMACR_ADDR_Pos) & (uint32_t)SCU_GENERAL_RMACR_ADDR_Msk); /* Transfer from RMDATA to Retention memory */ - rmacr |= (uint32_t)(SCU_GENERAL_RMACR_RDWR_Msk); + rmacr &= ~((uint32_t)(SCU_GENERAL_RMACR_RDWR_Msk)); /* Writing an adress & direction of transfer into RMACR register */ SCU_GENERAL->RMACR = rmacr; @@ -474,6 +526,7 @@ void XMC_SCU_CLOCK_Init(const XMC_SCU_CLOCK_CONFIG_t *const config) if (config->enable_osculp == true) { XMC_SCU_CLOCK_EnableLowPowerOscillator(); + while(XMC_SCU_CLOCK_IsLowPowerOscillatorStable() == false); } XMC_SCU_HIB_SetStandbyClockSource(config->fstdby_clksrc); @@ -487,6 +540,7 @@ void XMC_SCU_CLOCK_Init(const XMC_SCU_CLOCK_CONFIG_t *const config) if (config->enable_oschp == true) { XMC_SCU_CLOCK_EnableHighPerformanceOscillator(); + while(XMC_SCU_CLOCK_IsHighPerformanceOscillatorStable() == false); } if (config->syspll_config.mode == XMC_SCU_CLOCK_SYSPLL_MODE_DISABLED) @@ -533,13 +587,13 @@ uint32_t XMC_SCU_TRAP_GetStatus(void) /* API to manually trigger a trap event */ void XMC_SCU_TRAP_Trigger(const uint32_t trap) { - SCU_TRAP->TRAPSET |= (uint32_t)trap; + SCU_TRAP->TRAPSET = (uint32_t)trap; } /* API to clear a trap event */ void XMC_SCU_TRAP_ClearStatus(const uint32_t trap) { - SCU_TRAP->TRAPCLR |= (uint32_t)trap; + SCU_TRAP->TRAPCLR = (uint32_t)trap; } /* API to clear parity error event */ @@ -554,21 +608,25 @@ uint32_t XMC_SCU_PARITY_GetStatus(void) return (SCU_PARITY->PEFLAG); } +/* API to enable parity error checking for the selected on-chip RAM type */ void XMC_SCU_PARITY_Enable(const uint32_t memory) { SCU_PARITY->PEEN |= (uint32_t)memory; } +/* API to disable parity error checking for the selected on-chip RAM type */ void XMC_SCU_PARITY_Disable(const uint32_t memory) { SCU_PARITY->PEEN &= (uint32_t)~memory; } +/* API to enable trap assertion for the parity error source */ void XMC_SCU_PARITY_EnableTrapGeneration(const uint32_t memory) { SCU_PARITY->PETE |= (uint32_t)memory; } +/* API to disable the assertion of trap for the parity error source */ void XMC_SCU_PARITY_DisableTrapGeneration(const uint32_t memory) { SCU_PARITY->PETE &= (uint32_t)~memory; @@ -591,18 +649,8 @@ void XMC_SCU_RESET_AssertPeripheralReset(const XMC_SCU_PERIPHERAL_RESET_t periph { uint32_t index = (uint32_t)((((uint32_t)peripheral) & 0xf0000000UL) >> 28UL); uint32_t mask = (((uint32_t)peripheral) & ((uint32_t)~0xf0000000UL)); -#if UC_SERIES == XMC45 || UC_SERIES == XMC48 || UC_SERIES == XMC47 - static __O uint32_t *const set_peripheral_reset[] = {&(SCU_RESET->PRSET0), - &(SCU_RESET->PRSET1), - &(SCU_RESET->PRSET2), - &(SCU_RESET->PRSET3)}; -#else - static __O uint32_t *const set_peripheral_reset[] = {&(SCU_RESET->PRSET0), - &(SCU_RESET->PRSET1), - &(SCU_RESET->PRSET2)}; -#endif - *set_peripheral_reset[index] |= (uint32_t)mask; + *(uint32_t *)(&(SCU_RESET->PRSET0) + (index * 3U)) = (uint32_t)mask; } /* API to manually de-assert a reset request */ @@ -610,18 +658,8 @@ void XMC_SCU_RESET_DeassertPeripheralReset(const XMC_SCU_PERIPHERAL_RESET_t peri { uint32_t index = (uint32_t)((((uint32_t)peripheral) & 0xf0000000UL) >> 28UL); uint32_t mask = (((uint32_t)peripheral) & ((uint32_t)~0xf0000000UL)); -#if UC_SERIES == XMC45 || UC_SERIES == XMC48 || UC_SERIES == XMC47 - static __O uint32_t *const clear_peripheral_reset[] = {&(SCU_RESET->PRCLR0), - &(SCU_RESET->PRCLR1), - &(SCU_RESET->PRCLR2), - &(SCU_RESET->PRCLR3)}; -#else - static __O uint32_t *const clear_peripheral_reset[] = {&(SCU_RESET->PRCLR0), - &(SCU_RESET->PRCLR1), - &(SCU_RESET->PRCLR2)}; -#endif - *clear_peripheral_reset[index] |= (uint32_t)mask; + *(uint32_t *)(&(SCU_RESET->PRCLR0) + (index * 3U)) = (uint32_t)mask; } /* Find out if the peripheral reset is asserted */ @@ -629,18 +667,8 @@ bool XMC_SCU_RESET_IsPeripheralResetAsserted(const XMC_SCU_PERIPHERAL_RESET_t pe { uint32_t index = (uint32_t)((((uint32_t)peripheral) & 0xf0000000UL) >> 28UL); uint32_t mask = (((uint32_t)peripheral) & ((uint32_t)~0xf0000000UL)); -#if UC_SERIES == XMC45 || UC_SERIES == XMC48 || UC_SERIES == XMC47 - static __I uint32_t *const clear_peripheral_reset[] = {&(SCU_RESET->PRSTAT0), - &(SCU_RESET->PRSTAT1), - &(SCU_RESET->PRSTAT2), - &(SCU_RESET->PRSTAT3)}; -#else - static __I uint32_t *const clear_peripheral_reset[] = {&(SCU_RESET->PRSTAT0), - &(SCU_RESET->PRSTAT1), - &(SCU_RESET->PRSTAT2)}; -#endif - return (bool)(*clear_peripheral_reset[index] & mask); + return ((*(uint32_t *)(&(SCU_RESET->PRSTAT0) + (index * 3U)) & mask) != 0U); } /* @@ -712,6 +740,9 @@ uint32_t XMC_SCU_CLOCK_GetUsbPllClockFrequency(void) return (clock_frequency); } +/* + * API to retrieve frequency of CCU clock frequency + */ uint32_t XMC_SCU_CLOCK_GetCcuClockFrequency(void) { uint32_t frequency = 0UL; @@ -761,6 +792,9 @@ uint32_t XMC_SCU_CLOCK_GetEbuClockFrequency(void) #endif #if defined(ECAT0) +/* + * API to retrieve ECAT clock frequency + */ uint32_t XMC_SCU_CLOCK_GetECATClockFrequency(void) { uint32_t frequency; @@ -1000,6 +1034,7 @@ void XMC_SCU_CLOCK_SetExternalOutputClockDivider(const uint32_t divider) } #if defined(ECAT0) +/* API to configure the ECAT clock by setting the clock divider for the ECAT clock source */ void XMC_SCU_CLOCK_SetECATClockDivider(const uint32_t divider) { SCU_CLK->ECATCLKCR = (SCU_CLK->ECATCLKCR & ~SCU_CLK_ECATCLKCR_ECADIV_Msk) | @@ -1026,21 +1061,13 @@ bool XMC_SCU_CLOCK_IsClockEnabled(const XMC_SCU_CLOCK_t clock) } #if defined(CLOCK_GATING_SUPPORTED) +/* API to gate a given module clock */ void XMC_SCU_CLOCK_GatePeripheralClock(const XMC_SCU_PERIPHERAL_CLOCK_t peripheral) { uint32_t index = (peripheral & 0xf0000000UL) >> 28UL; uint32_t mask = (peripheral & (uint32_t)~0xf0000000UL); -#if (UC_SERIES == XMC48 || UC_SERIES == XMC47) - static __O uint32_t *const set_peripheral_gate[] = {&(SCU_CLK->CGATSET0), - &(SCU_CLK->CGATSET1), - &(SCU_CLK->CGATSET2), - &(SCU_CLK->CGATSET3)}; -#else - static __O uint32_t *const set_peripheral_gate[] = {&(SCU_CLK->CGATSET0), - &(SCU_CLK->CGATSET1), - &(SCU_CLK->CGATSET2)}; -#endif - *set_peripheral_gate[index] |= (uint32_t)mask; + + *(uint32_t *)((&(SCU_CLK->CGATSET0)) + (index * 3U)) = (uint32_t)mask; } /* API to ungate a given module clock */ @@ -1048,17 +1075,8 @@ void XMC_SCU_CLOCK_UngatePeripheralClock(const XMC_SCU_PERIPHERAL_CLOCK_t periph { uint32_t index = (uint32_t)((peripheral & 0xf0000000UL) >> 28UL); uint32_t mask = (peripheral & (uint32_t)~0xf0000000UL); -#if (UC_SERIES == XMC48 || UC_SERIES == XMC47) - static __O uint32_t *const clear_peripheral_gate[] = {&(SCU_CLK->CGATCLR0), - &(SCU_CLK->CGATCLR1), - &(SCU_CLK->CGATCLR2), - &(SCU_CLK->CGATCLR3)}; -#else - static __O uint32_t *const clear_peripheral_gate[] = {&(SCU_CLK->CGATCLR0), - &(SCU_CLK->CGATCLR1), - &(SCU_CLK->CGATCLR2)}; -#endif - *clear_peripheral_gate[index] |= (uint32_t)mask; + + *(uint32_t *)(&(SCU_CLK->CGATCLR0) + (index * 3U)) = (uint32_t)mask; } /* API to ungate a given module clock */ @@ -1066,25 +1084,28 @@ bool XMC_SCU_CLOCK_IsPeripheralClockGated(const XMC_SCU_PERIPHERAL_CLOCK_t perip { uint32_t index = ((peripheral & 0xf0000000UL) >> 28UL); uint32_t mask = (peripheral & (uint32_t)~0xf0000000UL); -#if (UC_SERIES == XMC48 || UC_SERIES == XMC47) - static __I uint32_t *const clear_peripheral_gate[] = {&(SCU_CLK->CGATSTAT0), - &(SCU_CLK->CGATSTAT1), - &(SCU_CLK->CGATSTAT2), - &(SCU_CLK->CGATSTAT3)}; -#else - static __I uint32_t *const clear_peripheral_gate[] = {&(SCU_CLK->CGATSTAT0), - &(SCU_CLK->CGATSTAT1), - &(SCU_CLK->CGATSTAT2)}; -#endif - return (bool)(*clear_peripheral_gate[index] & mask); + + return ((*(uint32_t *)(&(SCU_CLK->CGATSTAT0) + (index * 3U)) & mask) != 0U); } #endif +float XMC_SCU_POWER_GetEVR13Voltage(void) +{ + return (SCU_POWER->EVRVADCSTAT & SCU_POWER_EVRVADCSTAT_VADC13V_Msk) * XMC_SCU_POWER_LSB13V; +} + +float XMC_SCU_POWER_GetEVR33Voltage(void) +{ + return ((SCU_POWER->EVRVADCSTAT & SCU_POWER_EVRVADCSTAT_VADC33V_Msk) >> SCU_POWER_EVRVADCSTAT_VADC33V_Pos) * XMC_SCU_POWER_LSB33V; +} + +/* API to enable USB PLL for USB clock */ void XMC_SCU_CLOCK_EnableUsbPll(void) { SCU_PLL->USBPLLCON &= (uint32_t)~(SCU_PLL_USBPLLCON_VCOPWD_Msk | SCU_PLL_USBPLLCON_PLLPWD_Msk); } +/* API to disable USB PLL for USB clock */ void XMC_SCU_CLOCK_DisableUsbPll(void) { SCU_PLL->USBPLLCON |= (uint32_t)(SCU_PLL_USBPLLCON_VCOPWD_Msk | SCU_PLL_USBPLLCON_PLLPWD_Msk); @@ -1119,12 +1140,14 @@ void XMC_SCU_CLOCK_StartUsbPll(uint32_t pdiv, uint32_t ndiv) } +/* API to disable USB PLL operation */ void XMC_SCU_CLOCK_StopUsbPll(void) { SCU_PLL->USBPLLCON = (uint32_t)(SCU_PLL_USBPLLCON_VCOPWD_Msk | SCU_PLL_USBPLLCON_PLLPWD_Msk | SCU_PLL_USBPLLCON_VCOBYP_Msk); } +/* API to onfigure the calibration mode for internal oscillator */ void XMC_SCU_CLOCK_SetBackupClockCalibrationMode(XMC_SCU_CLOCK_FOFI_CALIBRATION_MODE_t mode) { /* Enable factory calibration based trimming */ @@ -1143,24 +1166,29 @@ void XMC_SCU_CLOCK_SetBackupClockCalibrationMode(XMC_SCU_CLOCK_FOFI_CALIBRATION_ XMC_SCU_lDelay(100UL); } + + /* API to enable USB Phy and comparator */ void XMC_SCU_POWER_EnableUsb(void) { - SCU_POWER->PWRSET |= (uint32_t)SCU_POWER_PWRSET_USBPHYPDQ_Msk; -#if ((UC_SERIES == XMC45) || (UC_SERIES == XMC44) || UC_SERIES == XMC48 || UC_SERIES == XMC47) - SCU_POWER->PWRSET |= (uint32_t)SCU_POWER_PWRSET_USBOTGEN_Msk; -#endif +#if defined(USB_OTG_SUPPORTED) + SCU_POWER->PWRSET = (uint32_t)(SCU_POWER_PWRSET_USBOTGEN_Msk | SCU_POWER_PWRSET_USBPHYPDQ_Msk); +#else + SCU_POWER->PWRSET = (uint32_t)SCU_POWER_PWRSET_USBPHYPDQ_Msk; +#endif } /* API to power down USB Phy and comparator */ void XMC_SCU_POWER_DisableUsb(void) { - SCU_POWER->PWRCLR |= (uint32_t)SCU_POWER_PWRSET_USBPHYPDQ_Msk; -#if ((UC_SERIES == XMC45) || (UC_SERIES == XMC44) || UC_SERIES == XMC48 || UC_SERIES == XMC47) - SCU_POWER->PWRCLR |= (uint32_t)SCU_POWER_PWRSET_USBOTGEN_Msk; -#endif +#if defined(USB_OTG_SUPPORTED) + SCU_POWER->PWRCLR = (uint32_t)(SCU_POWER_PWRCLR_USBOTGEN_Msk | SCU_POWER_PWRSET_USBPHYPDQ_Msk); +#else + SCU_POWER->PWRCLR = (uint32_t)SCU_POWER_PWRCLR_USBPHYPDQ_Msk; +#endif } +/* API to check USB PLL is locked or not */ bool XMC_SCU_CLOCK_IsUsbPllLocked(void) { return (bool)((SCU_PLL->USBPLLSTAT & SCU_PLL_USBPLLSTAT_VCOLOCK_Msk) != 0UL); @@ -1172,7 +1200,7 @@ void XMC_SCU_HIB_EnableHibernateDomain(void) /* Power up HIB domain if and only if it is currently powered down */ if((SCU_POWER->PWRSTAT & SCU_POWER_PWRSTAT_HIBEN_Msk) == 0UL) { - SCU_POWER->PWRSET |= (uint32_t)SCU_POWER_PWRSET_HIB_Msk; + SCU_POWER->PWRSET = (uint32_t)SCU_POWER_PWRSET_HIB_Msk; while((SCU_POWER->PWRSTAT & SCU_POWER_PWRSTAT_HIBEN_Msk) == 0UL) { @@ -1183,8 +1211,11 @@ void XMC_SCU_HIB_EnableHibernateDomain(void) /* Remove the reset only if HIB domain were in a state of reset */ if((SCU_RESET->RSTSTAT) & SCU_RESET_RSTSTAT_HIBRS_Msk) { - SCU_RESET->RSTCLR |= (uint32_t)SCU_RESET_RSTCLR_HIBRS_Msk; - XMC_SCU_lDelay(150U); + SCU_RESET->RSTCLR = (uint32_t)SCU_RESET_RSTCLR_HIBRS_Msk; + while((SCU_RESET->RSTSTAT & SCU_RESET_RSTSTAT_HIBRS_Msk) != 0UL) + { + /* wait until HIB domain is enabled */ + } } } @@ -1192,11 +1223,12 @@ void XMC_SCU_HIB_EnableHibernateDomain(void) void XMC_SCU_HIB_DisableHibernateDomain(void) { /* Disable hibernate domain */ - SCU_POWER->PWRCLR |= (uint32_t)SCU_POWER_PWRCLR_HIB_Msk; + SCU_POWER->PWRCLR = (uint32_t)SCU_POWER_PWRCLR_HIB_Msk; /* Reset of hibernate domain reset */ - SCU_RESET->RSTSET |= (uint32_t)SCU_RESET_RSTSET_HIBRS_Msk; + SCU_RESET->RSTSET = (uint32_t)SCU_RESET_RSTSET_HIBRS_Msk; } +/* API to check the hibernation domain is enabled or not */ bool XMC_SCU_HIB_IsHibernateDomainEnabled(void) { return ((bool)(SCU_POWER->PWRSTAT & SCU_POWER_PWRSTAT_HIBEN_Msk) && @@ -1206,66 +1238,367 @@ bool XMC_SCU_HIB_IsHibernateDomainEnabled(void) /* API to enable internal slow clock - fOSI (32.768kHz) in hibernate domain */ void XMC_SCU_HIB_EnableInternalSlowClock(void) { - SCU_HIBERNATE->OSCSICTRL &= (uint32_t)~(SCU_HIBERNATE_OSCSICTRL_PWD_Msk); - /* Wait until the update of OSCSICTRL register in hibernate domain is completed */ while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_OSCSICTRL_Msk) { + /* Wait until OSCSICTRL register in hibernate domain is ready to accept a write */ } + SCU_HIBERNATE->OSCSICTRL &= (uint32_t)~(SCU_HIBERNATE_OSCSICTRL_PWD_Msk); } /* API to disable internal slow clock - fOSI (32.768kHz) in hibernate domain */ void XMC_SCU_HIB_DisableInternalSlowClock(void) { - SCU_HIBERNATE->OSCSICTRL |= (uint32_t)SCU_HIBERNATE_OSCSICTRL_PWD_Msk; - /* Wait until the update of OSCSICTRL register in hibernate domain is completed */ while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_OSCSICTRL_Msk) { + /* Wait until OSCSICTRL register in hibernate domain is ready to accept a write */ } + SCU_HIBERNATE->OSCSICTRL |= (uint32_t)SCU_HIBERNATE_OSCSICTRL_PWD_Msk; +} + +void XMC_SCU_HIB_ClearEventStatus(int32_t event) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_HDCLR_Msk) + { + /* Wait until HDCLR register in hibernate domain is ready to accept a write */ + } + SCU_HIBERNATE->HDCLR = event; +} + +void XMC_SCU_HIB_TriggerEvent(int32_t event) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_HDSET_Msk) + { + /* Wait until HDSET register in hibernate domain is ready to accept a write */ + } + SCU_HIBERNATE->HDSET = event; +} + +void XMC_SCU_HIB_EnableEvent(int32_t event) +{ +#if (defined(DOXYGEN) || (UC_SERIES == XMC44) || (UC_SERIES == XMC42) || (UC_SERIES == XMC41)) + event = ((event & XMC_SCU_HIB_EVENT_LPAC_VBAT_POSEDGE) << (SCU_HIBERNATE_HDCR_VBATHI_Pos - SCU_HIBERNATE_HDSTAT_VBATPEV_Pos)) | (event & (uint32_t)~XMC_SCU_HIB_EVENT_LPAC_VBAT_POSEDGE); + event = ((event & XMC_SCU_HIB_EVENT_LPAC_VBAT_NEGEDGE) << (SCU_HIBERNATE_HDCR_VBATLO_Pos - SCU_HIBERNATE_HDSTAT_VBATNEV_Pos)) | (event & (uint32_t)~XMC_SCU_HIB_EVENT_LPAC_VBAT_NEGEDGE); + event = ((event & XMC_SCU_HIB_EVENT_LPAC_HIB_IO_0_POSEDGE) << (SCU_HIBERNATE_HDCR_AHIBIO0HI_Pos - SCU_HIBERNATE_HDSTAT_AHIBIO0PEV_Pos)) | (event & (uint32_t)~XMC_SCU_HIB_EVENT_LPAC_HIB_IO_0_POSEDGE); + event = ((event & XMC_SCU_HIB_EVENT_LPAC_HIB_IO_0_NEGEDGE) << (SCU_HIBERNATE_HDCR_AHIBIO0LO_Pos - SCU_HIBERNATE_HDSTAT_AHIBIO0NEV_Pos)) | (event & (uint32_t)~XMC_SCU_HIB_EVENT_LPAC_HIB_IO_0_NEGEDGE); +#if (defined(DOXYGEN) || ((UC_SERIES == XMC44) && (UC_PACKAGE == LQFP100))) + event = ((event & XMC_SCU_HIB_EVENT_LPAC_HIB_IO_1_POSEDGE) << (SCU_HIBERNATE_HDCR_AHIBIO1HI_Pos - SCU_HIBERNATE_HDSTAT_AHIBIO1PEV_Pos)) | (event & (uint32_t)~XMC_SCU_HIB_EVENT_LPAC_HIB_IO_1_POSEDGE); + event = ((event & XMC_SCU_HIB_EVENT_LPAC_HIB_IO_1_NEGEDGE) << (SCU_HIBERNATE_HDCR_AHIBIO1LO_Pos - SCU_HIBERNATE_HDSTAT_AHIBIO1NEV_Pos)) | (event & (uint32_t)~XMC_SCU_HIB_EVENT_LPAC_HIB_IO_1_NEGEDGE); +#endif +#endif + + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_HDCR_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + SCU_HIBERNATE->HDCR |= event; +} + +void XMC_SCU_HIB_DisableEvent(int32_t event) +{ +#if (defined(DOXYGEN) || (UC_SERIES == XMC44) || (UC_SERIES == XMC42) || (UC_SERIES == XMC41)) + event = ((event & XMC_SCU_HIB_EVENT_LPAC_VBAT_POSEDGE) << (SCU_HIBERNATE_HDCR_VBATHI_Pos - SCU_HIBERNATE_HDSTAT_VBATPEV_Pos)) | (event & (uint32_t)~XMC_SCU_HIB_EVENT_LPAC_VBAT_POSEDGE); + event = ((event & XMC_SCU_HIB_EVENT_LPAC_VBAT_NEGEDGE) << (SCU_HIBERNATE_HDCR_VBATLO_Pos - SCU_HIBERNATE_HDSTAT_VBATNEV_Pos)) | (event & (uint32_t)~XMC_SCU_HIB_EVENT_LPAC_VBAT_NEGEDGE); + event = ((event & XMC_SCU_HIB_EVENT_LPAC_HIB_IO_0_POSEDGE) << (SCU_HIBERNATE_HDCR_AHIBIO0HI_Pos - SCU_HIBERNATE_HDSTAT_AHIBIO0PEV_Pos)) | (event & (uint32_t)~XMC_SCU_HIB_EVENT_LPAC_HIB_IO_0_POSEDGE); + event = ((event & XMC_SCU_HIB_EVENT_LPAC_HIB_IO_0_NEGEDGE) << (SCU_HIBERNATE_HDCR_AHIBIO0LO_Pos - SCU_HIBERNATE_HDSTAT_AHIBIO0NEV_Pos)) | (event & (uint32_t)~XMC_SCU_HIB_EVENT_LPAC_HIB_IO_0_NEGEDGE); +#if (defined(DOXYGEN) || ((UC_SERIES == XMC44) && (UC_PACKAGE == LQFP100))) + event = ((event & XMC_SCU_HIB_EVENT_LPAC_HIB_IO_1_POSEDGE) << (SCU_HIBERNATE_HDCR_AHIBIO1HI_Pos - SCU_HIBERNATE_HDSTAT_AHIBIO1PEV_Pos)) | (event & (uint32_t)~XMC_SCU_HIB_EVENT_LPAC_HIB_IO_1_POSEDGE); + event = ((event & XMC_SCU_HIB_EVENT_LPAC_HIB_IO_1_NEGEDGE) << (SCU_HIBERNATE_HDCR_AHIBIO1LO_Pos - SCU_HIBERNATE_HDSTAT_AHIBIO1NEV_Pos)) | (event & (uint32_t)~XMC_SCU_HIB_EVENT_LPAC_HIB_IO_1_NEGEDGE); +#endif +#endif + + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_HDCR_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + SCU_HIBERNATE->HDCR &= ~event; +} + +void XMC_SCU_HIB_EnterHibernateState(void) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_HDCR_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + SCU_HIBERNATE->HDCR |= SCU_HIBERNATE_HDCR_HIB_Msk; +} + +void XMC_SCU_HIB_EnterHibernateStateEx(XMC_SCU_HIB_HIBERNATE_MODE_t mode) +{ + if (mode == XMC_SCU_HIB_HIBERNATE_MODE_EXTERNAL) + { + XMC_SCU_HIB_EnterHibernateState(); + } +#if ((UC_SERIES == XMC44) || (UC_SERIES == XMC42) || (UC_SERIES == XMC41)) + if (mode == XMC_SCU_HIB_HIBERNATE_MODE_INTERNAL) + { + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_HINTSET_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + SCU_HIBERNATE->HINTSET = SCU_HIBERNATE_HINTSET_HIBNINT_Msk; + } +#endif +} + +void XMC_SCU_HIB_SetWakeupTriggerInput(XMC_SCU_HIB_IO_t pin) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_HDCR_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + + if (pin == XMC_SCU_HIB_IO_0) + { + SCU_HIBERNATE->HDCR |= SCU_HIBERNATE_HDCR_WKUPSEL_Msk; + } + else + { + SCU_HIBERNATE->HDCR &= ~SCU_HIBERNATE_HDCR_WKUPSEL_Msk; + } +} + +void XMC_SCU_HIB_SetPinMode(XMC_SCU_HIB_IO_t pin, XMC_SCU_HIB_PIN_MODE_t mode) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_HDCR_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + SCU_HIBERNATE->HDCR = (SCU_HIBERNATE->HDCR & ~(SCU_HIBERNATE_HDCR_HIBIO0SEL_Msk << (SCU_HIBERNATE_HDCR_HIBIOSEL_Size * pin))) | + (mode << (SCU_HIBERNATE_HDCR_HIBIOSEL_Size * pin)); +} + +void XMC_SCU_HIB_SetPinOutputLevel(XMC_SCU_HIB_IO_t pin, XMC_SCU_HIB_IO_OUTPUT_LEVEL_t level) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_HDCR_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + SCU_HIBERNATE->HDCR = (SCU_HIBERNATE->HDCR & ~(SCU_HIBERNATE_HDCR_HIBIO0POL_Msk << pin)) | + (level << pin); +} + +void XMC_SCU_HIB_SetInput0(XMC_SCU_HIB_IO_t pin) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_HDCR_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + + if (pin == XMC_SCU_HIB_IO_0) + { + SCU_HIBERNATE->HDCR |= SCU_HIBERNATE_HDCR_GPI0SEL_Msk; + } + else + { + SCU_HIBERNATE->HDCR &= ~SCU_HIBERNATE_HDCR_GPI0SEL_Msk; + } +} + +void XMC_SCU_HIB_SetSR0Input(XMC_SCU_HIB_SR0_INPUT_t input) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_HDCR_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } +#if ((UC_SERIES == XMC44) || (UC_SERIES == XMC42) || (UC_SERIES == XMC41)) + SCU_HIBERNATE->HDCR = (SCU_HIBERNATE->HDCR & (uint32_t)~(SCU_HIBERNATE_HDCR_GPI0SEL_Msk | SCU_HIBERNATE_HDCR_ADIG0SEL_Msk)) | +#else + SCU_HIBERNATE->HDCR = (SCU_HIBERNATE->HDCR & (uint32_t)~(SCU_HIBERNATE_HDCR_GPI0SEL_Msk)) | +#endif + input; +} + +#if ((UC_SERIES == XMC44) || (UC_SERIES == XMC42) || (UC_SERIES == XMC41)) + +#if ((UC_SERIES == XMC44) && (UC_PACKAGE == LQFP100)) +void XMC_SCU_HIB_SetSR1Input(XMC_SCU_HIB_SR1_INPUT_t input) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_HDCR_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + SCU_HIBERNATE->HDCR = (SCU_HIBERNATE->HDCR & (uint32_t)~(SCU_HIBERNATE_HDCR_GPI0SEL_Msk | SCU_HIBERNATE_HDCR_ADIG0SEL_Msk | SCU_HIBERNATE_HDCR_XTALGPI1SEL_Msk)) | + input; +} +#endif + +void XMC_SCU_HIB_LPAC_SetInput(XMC_SCU_HIB_LPAC_INPUT_t input) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_LPACCONF_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + SCU_HIBERNATE->LPACCONF = (SCU_HIBERNATE->LPACCONF & (uint32_t)~SCU_HIBERNATE_LPACCONF_CMPEN_Msk) | + input; +} + +void XMC_SCU_HIB_LPAC_SetTrigger(XMC_SCU_HIB_LPAC_TRIGGER_t trigger) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_LPACCONF_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + SCU_HIBERNATE->LPACCONF = (SCU_HIBERNATE->LPACCONF & (uint32_t)~SCU_HIBERNATE_LPACCONF_TRIGSEL_Msk) | + trigger; +} + +void XMC_SCU_HIB_LPAC_SetTiming(bool enable_delay, uint16_t interval_count, uint8_t settle_count) +{ + uint32_t config = 0; + + if (enable_delay) + { + config = SCU_HIBERNATE_LPACCONF_CONVDEL_Msk; + } + + config |= interval_count << SCU_HIBERNATE_LPACCONF_INTERVCNT_Pos; + config |= settle_count << SCU_HIBERNATE_LPACCONF_SETTLECNT_Pos; + + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_LPACCONF_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + + SCU_HIBERNATE->LPACCONF = (SCU_HIBERNATE->LPACCONF & (uint32_t)~(SCU_HIBERNATE_LPACCONF_CONVDEL_Msk | + SCU_HIBERNATE_LPACCONF_INTERVCNT_Msk | + SCU_HIBERNATE_LPACCONF_SETTLECNT_Msk)) | + config; + +} + +void XMC_SCU_HIB_LPAC_SetVBATThresholds(uint8_t lower, uint8_t upper) +{ + + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_LPACTH0_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + + SCU_HIBERNATE->LPACTH0 = (lower << SCU_HIBERNATE_LPACTH0_VBATLO_Pos) | (upper << SCU_HIBERNATE_LPACTH0_VBATHI_Pos); + + + +} + +void XMC_SCU_HIB_LPAC_SetHIBIO0Thresholds(uint8_t lower, uint8_t upper) +{ + + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_LPACTH1_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + + SCU_HIBERNATE->LPACTH1 = (SCU_HIBERNATE->LPACTH1 & (uint32_t)~(SCU_HIBERNATE_LPACTH1_AHIBIO0LO_Msk | SCU_HIBERNATE_LPACTH1_AHIBIO0HI_Msk)) | + (lower << SCU_HIBERNATE_LPACTH1_AHIBIO0LO_Pos) | + (upper << SCU_HIBERNATE_LPACTH1_AHIBIO0HI_Pos); + +} +#if ((UC_SERIES == XMC44) && (UC_PACKAGE == LQFP100)) +void XMC_SCU_HIB_LPAC_SetHIBIO1Thresholds(uint8_t lower, uint8_t upper) +{ + + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_LPACTH1_Msk) + { + /* Wait until HDCR register in hibernate domain is ready to accept a write */ + } + + SCU_HIBERNATE->LPACTH1 = (SCU_HIBERNATE->LPACTH1 & (uint32_t)~(SCU_HIBERNATE_LPACTH1_AHIBIO1LO_Msk | SCU_HIBERNATE_LPACTH1_AHIBIO1HI_Msk)) | + (lower << SCU_HIBERNATE_LPACTH1_AHIBIO1LO_Pos) | + (upper << SCU_HIBERNATE_LPACTH1_AHIBIO1HI_Pos); + +} +#endif +int32_t XMC_SCU_HIB_LPAC_GetStatus(void) +{ + return SCU_HIBERNATE->LPACST; +} + +void XMC_SCU_HIB_LPAC_ClearStatus(int32_t status) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_LPACCLR_Msk) + { + /* Wait until LPACCLR register in hibernate domain is ready to accept a write */ + } + SCU_HIBERNATE->LPACCLR = status;; +} + +void XMC_SCU_HIB_LPAC_TriggerCompare(XMC_SCU_HIB_LPAC_INPUT_t input) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_LPACSET_Msk) + { + /* Wait until LPACSET register in hibernate domain is ready to accept a write */ + } + + SCU_HIBERNATE->LPACSET = input; +} + +#endif + +bool XMC_SCU_CLOCK_IsLowPowerOscillatorStable(void) +{ + return ((SCU_HIBERNATE->HDSTAT & SCU_HIBERNATE_HDSTAT_ULPWDG_Msk) == 0UL); } /* API to configure the 32khz Ultra Low Power oscillator */ void XMC_SCU_CLOCK_EnableLowPowerOscillator(void) { + /* Enable OSC_ULP */ while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_OSCULCTRL_Msk) { /* Wait until the update of OSCULCTRL register in hibernate domain is completed */ } SCU_HIBERNATE->OSCULCTRL &= ~SCU_HIBERNATE_OSCULCTRL_MODE_Msk; - /* Check if the input clock is OK using OSCULP Oscillator Watchdog*/ + /* Enable OSC_ULP Oscillator Watchdog*/ while (SCU_GENERAL->MIRRSTS & SCU_GENERAL_MIRRSTS_HDCR_Msk) { /* check SCU_MIRRSTS to ensure that no transfer over serial interface is pending */ } SCU_HIBERNATE->HDCR |= (uint32_t)SCU_HIBERNATE_HDCR_ULPWDGEN_Msk; - /* wait till clock is stable */ - do + /* Enable OSC_ULP Oscillator Watchdog*/ + while (SCU_GENERAL->MIRRSTS & SCU_GENERAL_MIRRSTS_HDSET_Msk) { - while (SCU_GENERAL->MIRRSTS & SCU_GENERAL_MIRRSTS_HDCLR_Msk) - { - /* check SCU_MIRRSTS to ensure that no transfer over serial interface is pending */ - } - SCU_HIBERNATE->HDCLR |= (uint32_t)SCU_HIBERNATE_HDCLR_ULPWDG_Msk; - - XMC_SCU_lDelay(50U); - - } while ((SCU_HIBERNATE->HDSTAT & SCU_HIBERNATE_HDSTAT_ULPWDG_Msk) != 0UL); - + /* check SCU_MIRRSTS to ensure that no transfer over serial interface is pending */ + } + SCU_HIBERNATE->HDSET = (uint32_t)SCU_HIBERNATE_HDSET_ULPWDG_Msk; } /* API to configure the 32khz Ultra Low Power oscillator */ void XMC_SCU_CLOCK_DisableLowPowerOscillator(void) { - SCU_HIBERNATE->OSCULCTRL |= (uint32_t)SCU_HIBERNATE_OSCULCTRL_MODE_Msk; - while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_OSCULCTRL_Msk) { - /* Wait until the update of OSCULCTRL register in hibernate domain is completed */ + /* Wait until OSCULCTRL register in hibernate domain is ready to accept a write */ } + SCU_HIBERNATE->OSCULCTRL |= (uint32_t)SCU_HIBERNATE_OSCULCTRL_MODE_Msk; } -/* API to configure High Precision High Speed oscillator */ +void XMC_SCU_CLOCK_EnableLowPowerOscillatorGeneralPurposeInput(void) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_OSCULCTRL_Msk) + { + /* Wait until OSCULCTRL register in hibernate domain is ready to accept a write */ + } + SCU_HIBERNATE->OSCULCTRL |= SCU_HIBERNATE_OSCULCTRL_X1DEN_Msk | SCU_HIBERNATE_OSCULCTRL_MODE_Msk; +} + +void XMC_SCU_CLOCK_DisableLowPowerOscillatorGeneralPurposeInput(void) +{ + while((SCU_GENERAL->MIRRSTS) & SCU_GENERAL_MIRRSTS_OSCULCTRL_Msk) + { + /* Wait until OSCULCTRL register in hibernate domain is ready to accept a write */ + } + SCU_HIBERNATE->OSCULCTRL = (SCU_HIBERNATE->OSCULCTRL & ~(uint32_t)(SCU_HIBERNATE_OSCULCTRL_X1DEN_Msk | SCU_HIBERNATE_OSCULCTRL_MODE_Msk)) | + (SCU_HIBERNATE_OSCULCTRL_MODE_OSC_POWER_DOWN << SCU_HIBERNATE_OSCULCTRL_MODE_Pos); +} + +uint32_t XMC_SCU_CLOCK_GetLowPowerOscillatorGeneralPurposeInputStatus(void) +{ + return (SCU_HIBERNATE->OSCULSTAT & SCU_HIBERNATE_OSCULSTAT_X1D_Msk); +} + +/* API to enable High Precision High Speed oscillator */ void XMC_SCU_CLOCK_EnableHighPerformanceOscillator(void) { SCU_PLL->PLLCON0 &= (uint32_t)~SCU_PLL_PLLCON0_PLLPWD_Msk; @@ -1275,28 +1608,47 @@ void XMC_SCU_CLOCK_EnableHighPerformanceOscillator(void) /* restart OSC Watchdog */ SCU_PLL->PLLCON0 &= (uint32_t)~SCU_PLL_PLLCON0_OSCRES_Msk; - - while ((SCU_PLL->PLLSTAT & XMC_SCU_PLL_PLLSTAT_OSC_USABLE) != XMC_SCU_PLL_PLLSTAT_OSC_USABLE) - { - /* wait till OSC_HP output frequency is usable */ - } } +bool XMC_SCU_CLOCK_IsHighPerformanceOscillatorStable(void) +{ + return ((SCU_PLL->PLLSTAT & XMC_SCU_PLL_PLLSTAT_OSC_USABLE) == XMC_SCU_PLL_PLLSTAT_OSC_USABLE); +} + +/* API to disable High Precision High Speed oscillator */ void XMC_SCU_CLOCK_DisableHighPerformanceOscillator(void) { SCU_OSC->OSCHPCTRL |= (uint32_t)SCU_OSC_OSCHPCTRL_MODE_Msk; } +void XMC_SCU_CLOCK_EnableHighPerformanceOscillatorGeneralPurposeInput(void) +{ + SCU_OSC->OSCHPCTRL |= SCU_OSC_OSCHPCTRL_X1DEN_Msk; +} + +void XMC_SCU_CLOCK_DisableHighPerformanceOscillatorGeneralPurposeInput(void) +{ + SCU_OSC->OSCHPCTRL &= ~SCU_OSC_OSCHPCTRL_X1DEN_Msk; +} + +uint32_t XMC_SCU_CLOCK_GetHighPerformanceOscillatorGeneralPurposeInputStatus(void) +{ + return (SCU_OSC->OSCHPSTAT & SCU_OSC_OSCHPSTAT_X1D_Msk); +} + +/* API to enable main PLL */ void XMC_SCU_CLOCK_EnableSystemPll(void) { SCU_PLL->PLLCON0 &= (uint32_t)~(SCU_PLL_PLLCON0_VCOPWD_Msk | SCU_PLL_PLLCON0_PLLPWD_Msk); } +/* API to disable main PLL */ void XMC_SCU_CLOCK_DisableSystemPll(void) { SCU_PLL->PLLCON0 |= (uint32_t)(SCU_PLL_PLLCON0_VCOPWD_Msk | SCU_PLL_PLLCON0_PLLPWD_Msk); } +/* API to configure main PLL */ void XMC_SCU_CLOCK_StartSystemPll(XMC_SCU_CLOCK_SYSPLLCLKSRC_t source, XMC_SCU_CLOCK_SYSPLL_MODE_t mode, uint32_t pdiv, @@ -1304,7 +1656,7 @@ void XMC_SCU_CLOCK_StartSystemPll(XMC_SCU_CLOCK_SYSPLLCLKSRC_t source, uint32_t kdiv) { - float vco_frequency; + uint32_t vco_frequency; /* Q10.22, max VCO frequency = 520MHz */ uint32_t kdiv_temp; XMC_SCU_CLOCK_SetSystemPllClockSource(source); @@ -1314,14 +1666,14 @@ void XMC_SCU_CLOCK_StartSystemPll(XMC_SCU_CLOCK_SYSPLLCLKSRC_t source, /* Calculate initial step to be close to fOFI */ if (source == XMC_SCU_CLOCK_SYSPLLCLKSRC_OSCHP) { - vco_frequency = (float)OSCHP_GetFrequency(); + vco_frequency = (OSCHP_GetFrequency() / 1000000U) << 22; } else { - vco_frequency = (float)OFI_FREQUENCY; + vco_frequency = (OFI_FREQUENCY / 1000000U) << 22; } - vco_frequency = (float)((vco_frequency * (float)ndiv) / (float)pdiv); - kdiv_temp = (uint32_t)((uint32_t)vco_frequency / OFI_FREQUENCY); + vco_frequency = ((vco_frequency * ndiv) / pdiv); + kdiv_temp = (vco_frequency / (OFI_FREQUENCY / 1000000U)) >> 22; /* Switch to prescaler mode */ SCU_PLL->PLLCON0 |= (uint32_t)SCU_PLL_PLLCON0_VCOBYP_Msk; @@ -1356,13 +1708,13 @@ void XMC_SCU_CLOCK_StartSystemPll(XMC_SCU_CLOCK_SYSPLLCLKSRC_t source, } /* Ramp up PLL frequency in steps */ - kdiv_temp = (uint32_t)((uint32_t)vco_frequency / 60000000UL); + kdiv_temp = (vco_frequency / 60UL) >> 22; if (kdiv < kdiv_temp) { XMC_SCU_CLOCK_StepSystemPllFrequency(kdiv_temp); } - kdiv_temp = (uint32_t)((uint32_t)vco_frequency / 90000000UL); + kdiv_temp = (vco_frequency / 90UL) >> 22; if (kdiv < kdiv_temp) { XMC_SCU_CLOCK_StepSystemPllFrequency(kdiv_temp); @@ -1385,11 +1737,13 @@ void XMC_SCU_CLOCK_StartSystemPll(XMC_SCU_CLOCK_SYSPLLCLKSRC_t source, } } +/* API to stop main PLL operation */ void XMC_SCU_CLOCK_StopSystemPll(void) { SCU_PLL->PLLCON0 |= (uint32_t)SCU_PLL_PLLCON0_PLLPWD_Msk; } +/* API to step up/down the main PLL frequency */ void XMC_SCU_CLOCK_StepSystemPllFrequency(uint32_t kdiv) { SCU_PLL->PLLCON1 = (uint32_t)((SCU_PLL->PLLCON1 & ~SCU_PLL_PLLCON1_K2DIV_Msk) | @@ -1398,13 +1752,14 @@ void XMC_SCU_CLOCK_StepSystemPllFrequency(uint32_t kdiv) XMC_SCU_lDelay(50U); } +/* API to check main PLL is locked or not */ bool XMC_SCU_CLOCK_IsSystemPllLocked(void) { return (bool)((SCU_PLL->PLLSTAT & SCU_PLL_PLLSTAT_VCOLOCK_Msk) != 0UL); } /* - * + * API to assign the event handler function to be executed on occurrence of the selected event. */ XMC_SCU_STATUS_t XMC_SCU_INTERRUPT_SetEventHandler(const XMC_SCU_INTERRUPT_EVENT_t event, const XMC_SCU_INTERRUPT_EVENT_HANDLER_t handler) @@ -1432,7 +1787,7 @@ XMC_SCU_STATUS_t XMC_SCU_INTERRUPT_SetEventHandler(const XMC_SCU_INTERRUPT_EVENT } /* - * + * API to execute callback functions for multiple events. */ void XMC_SCU_IRQHandler(uint32_t sr_num) { diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_acmp.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_acmp.c new file mode 100644 index 00000000..40fb4e11 --- /dev/null +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_acmp.c @@ -0,0 +1,119 @@ +/** + * @file xmc_acmp.c + * @date 2015-06-20 + * + * @cond + ********************************************************************************************************************* + * XMClib v2.1.8 - XMC Peripheral Driver Library + * + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with + * Infineon Technologies AG dave@infineon.com). + ********************************************************************************************************************* + * + * Change History + * -------------- + * + * 2014-12-10: + * - Initial
+ * 2015-02-20: + * - Removed unused declarations
+ * 2015-05-08: + * - Fixed sequence problem of low power mode in XMC_ACMP_Init() API
+ * - Fixed wrong register setting in XMC_ACMP_SetInput() API
+ * - Removed return type variable and by default comparator enable from XMC_ACMP_Init() API.
+ * Additional call to XMC_ACMP_EnableComparator() API needed to start Comparator after Init.
+ * 2015-06-04: + * - Removed return type variable and by default comparator enable from XMC_ACMP_Init() API.
+ * - Divided XMC_ACMP_SetInput into two 3 APIs to reduce the code size and complexity as stated below
+ * (a)XMC_ACMP_EnableReferenceDivider
+ * (b)XMC_ACMP_DisableReferenceDivider
+ * (c)XMC_ACMP_SetInput
+ * - Optimized enable and disable API's and moved to header file as static inline APIs. + * - XMC_ACMP_t typedef changed to structure which overrides the standard header file structure. + * 2015-06-20: + * - Removed definition of GetDriverVersion API + * @endcond + * + */ + + +/********************************************************************************************************************* + * HEADER FILES + ********************************************************************************************************************/ +#include + +/* If ACMP is available*/ +#if defined (COMPARATOR) + +/********************************************************************************************************************* + * MACROS + ********************************************************************************************************************/ + +#define XMC_ACMP_INSTANCE_1 (1U) /* Instance number for Slice-1 */ + +/********************************************************************************************************************* + * API IMPLEMENTATION + ********************************************************************************************************************/ + +/* API to initialize an instance of ACMP module */ +void XMC_ACMP_Init(XMC_ACMP_t *const peripheral, uint32_t instance, const XMC_ACMP_CONFIG_t *const config) +{ + + XMC_ASSERT("XMC_ACMP_Init:NULL Configuration", (config != (XMC_ACMP_CONFIG_t *)NULL)) + XMC_ASSERT("XMC_ACMP_Init:Wrong module pointer", XMC_ACMP_CHECK_MODULE_PTR(peripheral)) + XMC_ASSERT("XMC_ACMP_Init:Wrong instance number", XMC_ACMP_CHECK_INSTANCE(instance) ) + + /* + * Initializes the comparator with configuration supplied. Low power node setting is retained during initialization. + * All the instances passed are handled with low power setting, to avoid conditional check for ACMP0 instance. + * This reduces the code size. No side effects, because this register bit field is empty for other instances. + */ + peripheral->ANACMP[instance] = ((peripheral->ANACMP[instance] & (uint32_t)COMPARATOR_ANACMP0_CMP_LPWR_Msk)) | + (uint32_t)config->anacmp; +} + +/* API to select INP source */ +void XMC_ACMP_SetInput(XMC_ACMP_t *const peripheral, uint32_t instance, XMC_ACMP_INP_SOURCE_t source) +{ + XMC_ASSERT("XMC_ACMP_SetInput:Wrong module pointer", XMC_ACMP_CHECK_MODULE_PTR(peripheral)) + XMC_ASSERT("XMC_ACMP_SetInput:Wrong instance number", ((instance != XMC_ACMP_INSTANCE_1) && + XMC_ACMP_CHECK_INSTANCE(instance)) ) + XMC_ASSERT("XMC_ACMP_SetInput:Wrong input source", ((source == XMC_ACMP_INP_SOURCE_STANDARD_PORT) || + (source == XMC_ACMP_INP_SOURCE_ACMP1_INP_PORT)) ) + + /* + * Three options of Input Setting are listed below + * 1. The comparator inputs aren't connected to other comparator inputs + * 2. Can program the comparators to connect ACMP0.INP to ACMP1.INP in XMC1200 AA or XMC1300 AA + * Can program the comparators to connect ACMP0.INN to ACMP1.INP in XMC1200 AB or XMC1300 AB or XMC1400 AA + * 3. Can program the comparators to connect ACMP2.INP to ACMP1.INP + * 4. Can program the comparators to connect ACMP3.INP to ACMP1.INP in XMC1400 + */ + peripheral->ANACMP[instance] = ((peripheral->ANACMP[instance] & (uint32_t)(~COMPARATOR_ANACMP0_ACMP0_SEL_Msk))) | + (uint32_t)source; +} + +#endif /* #ifdef ACMP_AVAILABLE */ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_bccu.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_bccu.c new file mode 100644 index 00000000..90487a80 --- /dev/null +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_bccu.c @@ -0,0 +1,577 @@ +/** + * @file xmc_bccu.c + * @date 2015-06-20 + * + * @cond + ********************************************************************************************************************* + * XMClib v2.1.8 - XMC Peripheral Driver Library + * + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with + * Infineon Technologies AG dave@infineon.com). + ********************************************************************************************************************* + * + * Change History + * -------------- + * + * 2015-02-19: + * - Initial draft
+ * + * 2015-05-08: + * - Minor bug fixes in following APIs: XMC_BCCU_ConcurrentStartDimming(), XMC_BCCU_ConcurrentAbortDimming(), + * XMC_BCCU_SetGlobalDimmingLevel()
+ * + * 2015-06-20: + * - Removed version macros and declaration of GetDriverVersion API + * + * Detailed description of file:
+ * APIs for the functional blocks of BCCU have been defined:
+ * -- GLOBAL configuration
+ * -- Clock configuration, Function/Event configuration, Interrupt configuration
+ * + * @endcond + * + */ + +/********************************************************************************************************************* + * HEADER FILES + ********************************************************************************************************************/ +#include + +#if defined(BCCU0) +#include + +/********************************************************************************************************************* + * MACROS + ********************************************************************************************************************/ +#define XMC_BCCU_NO_OF_CHANNELS (9U) +#define XMC_BCCU_CHANNEL_MASK ((0x1 << XMC_BCCU_NO_OF_CHANNELS)-1) +#define XMC_BCCU_NO_OF_DIM_ENGINE (3U) +#define XMC_BCCU_DIM_ENGINE_MASK (((0x1 << XMC_BCCU_NO_OF_DIM_ENGINE)-1)) + +/********************************************************************************************************************* + * ENUMS + ********************************************************************************************************************/ + +/********************************************************************************************************************* + * DATA STRUCTURES + ********************************************************************************************************************/ + +/********************************************************************************************************************* + * GLOBAL DATA + ********************************************************************************************************************/ + +/********************************************************************************************************************* + * LOCAL/UTILITY ROUTINES + ********************************************************************************************************************/ + +/********************************************************************************************************************* + * API IMPLEMENTATION + ********************************************************************************************************************/ + +/* + * API to initialise the global resources of a BCCU module + */ +void XMC_BCCU_GlobalInit(XMC_BCCU_t *const bccu, const XMC_BCCU_GLOBAL_CONFIG_t *const config) +{ + XMC_SCU_CLOCK_UngatePeripheralClock(XMC_SCU_PERIPHERAL_CLOCK_BCCU0); + + bccu->GLOBCON = config->globcon; + + bccu->GLOBCLK = config->globclk; + bccu->GLOBDIM = config->global_dimlevel; + +} + +/* + * API to configure the global trigger mode & delay of a BCCU module + */ +void XMC_BCCU_ConfigGlobalTrigger(XMC_BCCU_t *const bccu, XMC_BCCU_TRIGMODE_t mode, XMC_BCCU_TRIGDELAY_t delay) +{ + bccu->GLOBCON &= ~(uint32_t)(BCCU_GLOBCON_TM_Msk | BCCU_GLOBCON_TRDEL_Msk); + bccu->GLOBCON |= ((uint32_t)mode | ((uint32_t)delay << BCCU_GLOBCON_TRDEL_Pos)); +} + +/* + * API to configure the trap input selection of a BCCU module + */ +void XMC_BCCU_SelectTrapInput (XMC_BCCU_t *const bccu, XMC_BCCU_CH_TRAP_IN_t input) +{ + bccu->GLOBCON &= ~(uint32_t)(BCCU_GLOBCON_TRAPIS_Msk); + bccu->GLOBCON |= ((uint32_t)input << BCCU_GLOBCON_TRAPIS_Pos); +} + +/* + * API to configure the trap edge selection of a BCCU module + */ +void XMC_BCCU_SetTrapEdge (XMC_BCCU_t *const bccu, XMC_BCCU_CH_TRAP_EDGE_t edge) +{ + bccu->GLOBCON &= ~(uint32_t)(BCCU_GLOBCON_TRAPED_Msk); + bccu->GLOBCON |= ((uint32_t)edge << BCCU_GLOBCON_TRAPED_Pos); +} + +/* + * API to configure the suspend mode of a BCCU module + */ +void XMC_BCCU_ConfigSuspendMode (XMC_BCCU_t *const bccu, XMC_BCCU_SUSPEND_MODE_t mode) +{ + bccu->GLOBCON &= ~(uint32_t)(BCCU_GLOBCON_SUSCFG_Msk); + bccu->GLOBCON |= ((uint32_t)mode << BCCU_GLOBCON_SUSCFG_Pos); +} + +/* + * API to configure number of consecutive zeroes allowed at modulator output (flicker watch-dog number) + */ +void XMC_BCCU_SetFlickerWDThreshold (XMC_BCCU_t *const bccu, uint32_t threshold_no) +{ + XMC_ASSERT("XMC_BCCU_SetFlickerWDThreshold: Invalid threshold no", (threshold_no <= BCCU_GLOBCON_WDMBN_Msk)); + + bccu->GLOBCON &= ~(uint32_t)(BCCU_GLOBCON_WDMBN_Msk); + bccu->GLOBCON |= (uint32_t)(threshold_no << BCCU_GLOBCON_WDMBN_Pos); +} + +/* + * API to configure the fast clock prescaler factor of a BCCU module + */ +void XMC_BCCU_SetFastClockPrescaler (XMC_BCCU_t *const bccu, uint32_t div) +{ + XMC_ASSERT("XMC_BCCU_SetFastClockPrescaler: Invalid divider value", (div <= BCCU_GLOBCLK_FCLK_PS_Msk)); + + bccu->GLOBCLK &= ~(uint32_t)(BCCU_GLOBCLK_FCLK_PS_Msk); + bccu->GLOBCLK |= div; + +} + +/* + * API to configure the dimmer clock prescaler factor of a BCCU module + */ +void XMC_BCCU_SetDimClockPrescaler (XMC_BCCU_t *const bccu, uint32_t div) +{ + XMC_ASSERT("XMC_BCCU_SetDimClockPrescaler: Invalid divider value", (div <= BCCU_GLOBCLK_DCLK_PS_Msk)); + + bccu->GLOBCLK &= ~(uint32_t)(BCCU_GLOBCLK_DCLK_PS_Msk); + bccu->GLOBCLK |= (uint32_t)(div << BCCU_GLOBCLK_DCLK_PS_Pos); + +} + +/* + * API to configure the modulator output (bit-time) clock prescaler factor of a BCCU module + */ +void XMC_BCCU_SelectBitClock (XMC_BCCU_t *const bccu, XMC_BCCU_BCLK_MODE_t div) +{ + bccu->GLOBCLK &= ~(uint32_t)(BCCU_GLOBCLK_BCS_Msk); + bccu->GLOBCLK |= ((uint32_t)div << BCCU_GLOBCLK_BCS_Pos); +} + +/* + * API to enable the channels at the same time + */ +void XMC_BCCU_ConcurrentEnableChannels (XMC_BCCU_t *const bccu, uint32_t mask) +{ + XMC_ASSERT("XMC_BCCU_ConcurrentEnableChannels: Invalid channel mask", (mask <= XMC_BCCU_CHANNEL_MASK)); + + bccu->CHEN |= mask; +} + +/* + * API to disable the channels at the same time + */ +void XMC_BCCU_ConcurrentDisableChannels (XMC_BCCU_t *const bccu, uint32_t mask) +{ + XMC_ASSERT("XMC_BCCU_ConcurrentDisableChannels: Invalid channel mask", (mask <= XMC_BCCU_CHANNEL_MASK)); + bccu->CHEN &= ~(uint32_t)(mask); +} + +/* + * API to set the channel's output passive levels at the same time + */ +void XMC_BCCU_ConcurrentSetOutputPassiveLevel(XMC_BCCU_t *const bccu, uint32_t chan_mask, XMC_BCCU_CH_ACTIVE_LEVEL_t level) +{ + XMC_ASSERT("XMC_BCCU_ConcurrentSetOutputPassiveLevel: Invalid channel mask", (chan_mask <= XMC_BCCU_CHANNEL_MASK)); + + bccu->CHOCON &= ~(uint32_t)(chan_mask); + bccu->CHOCON |= (chan_mask * (uint32_t)level); +} + +/* + * API to enable the various types of traps at the same time + */ +void XMC_BCCU_ConcurrentEnableTrap (XMC_BCCU_t *const bccu, uint32_t mask) +{ + XMC_ASSERT("XMC_BCCU_ConcurrentEnableTrap: Invalid channel mask", (mask <= XMC_BCCU_CHANNEL_MASK)); + + bccu->CHOCON |= (uint32_t)(mask << BCCU_CHOCON_CH0TPE_Pos); +} + +/* + * API to disable the various types of traps at the same time + */ +void XMC_BCCU_ConcurrentDisableTrap (XMC_BCCU_t *const bccu, uint32_t mask) +{ + XMC_ASSERT("XMC_BCCU_ConcurrentDisableTrap: Invalid channel mask", (mask <= XMC_BCCU_CHANNEL_MASK)); + + bccu->CHOCON &= ~(uint32_t)(mask << BCCU_CHOCON_CH0TPE_Pos); +} + +/* + * API to configure trigger mode and trigger delay at the same time, and also configure the channel enable + */ +void XMC_BCCU_ConcurrentConfigTrigger (XMC_BCCU_t *const bccu, XMC_BCCU_TRIG_CONFIG_t *trig) +{ + uint32_t reg; + + XMC_ASSERT("XMC_BCCU_ConcurrentConfigTrigger: Invalid channel mask", (trig->mask_chans <= XMC_BCCU_CHANNEL_MASK)); + + bccu->GLOBCON &= ~(uint32_t)(BCCU_GLOBCON_TM_Msk | BCCU_GLOBCON_TRDEL_Msk); + bccu->GLOBCON |= ((uint32_t)trig->mode | ((uint32_t)trig->delay << BCCU_GLOBCON_TRDEL_Pos)); + reg = 0U; + reg |= trig->mask_chans; + reg |= ((uint32_t)trig->mask_trig_lines << BCCU_CHTRIG_TOS0_Pos); + bccu->CHTRIG = reg; +} + +/* + * API to start the linear walk of the channels to change towards target intensity at the same time + */ +void XMC_BCCU_ConcurrentStartLinearWalk (XMC_BCCU_t *const bccu, uint32_t mask) +{ + XMC_ASSERT("XMC_BCCU_ConcurrentStartLinearWalk: Invalid channel mask", (mask <= XMC_BCCU_CHANNEL_MASK)); + + bccu->CHSTRCON |= (uint32_t)(mask); +} + +/* + * API to abort the linear walk of the channels at the same time + */ +void XMC_BCCU_ConcurrentAbortLinearWalk (XMC_BCCU_t *const bccu, uint32_t mask) +{ + XMC_ASSERT("XMC_BCCU_ConcurrentAbortLinearWalk: Invalid channel mask", (mask <= XMC_BCCU_CHANNEL_MASK)); + + bccu->CHSTRCON |= (uint32_t)(mask << BCCU_CHSTRCON_CH0A_Pos); +} + +/* + * API to enable the dimming engines at the same time + */ +void XMC_BCCU_ConcurrentEnableDimmingEngine (XMC_BCCU_t *const bccu, uint32_t mask) +{ + XMC_ASSERT("XMC_BCCU_ConcurrentEnableDimmingEngine: Invalid dimming engine mask", (mask <= XMC_BCCU_DIM_ENGINE_MASK)); + + bccu->DEEN = (uint32_t)(mask); +} + +/* + * API to enable the dimming engines at the same time + */ +void XMC_BCCU_ConcurrentDisableDimmingEngine (XMC_BCCU_t *const bccu, uint32_t mask) +{ + XMC_ASSERT("XMC_BCCU_ConcurrentDisableDimmingEngine: Invalid dimming engine mask", (mask <= XMC_BCCU_DIM_ENGINE_MASK)); + + bccu->DEEN &= ~(uint32_t)(mask); +} + +/* + * API to start the dimming engines at the same time to change towards target dim level + */ +void XMC_BCCU_ConcurrentStartDimming (XMC_BCCU_t *const bccu, uint32_t mask) +{ + XMC_ASSERT("XMC_BCCU_ConcurrentStartDimming: Invalid dimming engine mask", (mask <= XMC_BCCU_DIM_ENGINE_MASK)); + + bccu->DESTRCON = (uint32_t)(mask); +} + +/* + * API to abort the dimming engines at the same time + */ +void XMC_BCCU_ConcurrentAbortDimming (XMC_BCCU_t *const bccu, uint32_t mask) +{ + XMC_ASSERT("XMC_BCCU_ConcurrentAbortDimming: Invalid dimming engine mask", (mask <= XMC_BCCU_DIM_ENGINE_MASK)); + + bccu->DESTRCON = (uint32_t)(mask << BCCU_DESTRCON_DE0A_Pos); +} + +/* + * API to configure the dim level of a dimming engine + */ +void XMC_BCCU_SetGlobalDimmingLevel (XMC_BCCU_t *const bccu, uint32_t level) +{ + XMC_ASSERT("XMC_BCCU_SetGlobalDimmingLevel: Invalid global dimming level", (level <= BCCU_GLOBDIM_GLOBDIM_Msk)); + + bccu->GLOBDIM = level; +} + +/* + * API to enable a specific channel + */ +void XMC_BCCU_EnableChannel (XMC_BCCU_t *const bccu, uint32_t chan_no) +{ + XMC_ASSERT("XMC_BCCU_EnableChannel: Invalid channel number", (chan_no <= (XMC_BCCU_NO_OF_CHANNELS-1))); + + bccu->CHEN |= (uint32_t)(BCCU_CHEN_ECH0_Msk << chan_no); +} + +/* + * API to disable a specific channel + */ +void XMC_BCCU_DisableChannel (XMC_BCCU_t *const bccu, uint32_t chan_no) +{ + XMC_ASSERT("XMC_BCCU_DisableChannel: Invalid channel number", (chan_no <= (XMC_BCCU_NO_OF_CHANNELS-1))); + + bccu->CHEN &= ~(uint32_t)(BCCU_CHEN_ECH0_Msk << chan_no); +} + +/* + * API to set the specific channel's passive level + */ +void XMC_BCCU_SetOutputPassiveLevel(XMC_BCCU_t *const bccu, uint32_t chan_no, XMC_BCCU_CH_ACTIVE_LEVEL_t level) +{ + XMC_ASSERT("XMC_BCCU_SetOutputPassiveLevel: Invalid channel number", (chan_no <= (XMC_BCCU_NO_OF_CHANNELS-1))); + + bccu->CHOCON |= ((uint32_t)level << chan_no); +} + +/* + * API to enable the specific channel trap + */ +void XMC_BCCU_EnableTrap (XMC_BCCU_t *const bccu, uint32_t chan_no) +{ + XMC_ASSERT("XMC_BCCU_EnableTrap: Invalid channel number", (chan_no <= (XMC_BCCU_NO_OF_CHANNELS-1))); + + bccu->CHOCON |= (uint32_t)(BCCU_CHOCON_CH0TPE_Msk << chan_no); +} + +/* + * API to disable the specific channel trap + */ +void XMC_BCCU_DisableTrap (XMC_BCCU_t *const bccu, uint32_t chan_no) +{ + XMC_ASSERT("XMC_BCCU_DisableTrap: Invalid channel number", (chan_no <= (XMC_BCCU_NO_OF_CHANNELS-1))); + + bccu->CHOCON &= ~(uint32_t)(BCCU_CHOCON_CH0TPE_Msk << chan_no); +} + +/* + * API to configure specific channel trigger enable and trigger line. + */ +void XMC_BCCU_EnableChannelTrigger (XMC_BCCU_t *const bccu, uint32_t chan_no, XMC_BCCU_CH_TRIGOUT_t trig_line) +{ + uint32_t reg; + XMC_ASSERT("XMC_BCCU_EnableChannelTrigger: Invalid channel number", (chan_no <= (XMC_BCCU_NO_OF_CHANNELS-1))); + + bccu->CHTRIG &= ~(uint32_t)(BCCU_CHTRIG_TOS0_Msk << chan_no); + reg = (uint32_t)(BCCU_CHTRIG_ET0_Msk << chan_no); + reg |= ((uint32_t)trig_line << (BCCU_CHTRIG_TOS0_Pos + chan_no)); + bccu->CHTRIG |= reg; +} + +/* + * API to disable specific channel + */ +void XMC_BCCU_DisableChannelTrigger (XMC_BCCU_t *const bccu, uint32_t chan_no) +{ + XMC_ASSERT("XMC_BCCU_DisableChannelTrigger: Invalid channel number", (chan_no <= (XMC_BCCU_NO_OF_CHANNELS-1))); + + bccu->CHTRIG &= ~(uint32_t)(BCCU_CHTRIG_ET0_Msk << chan_no); +} + +/* + * API to initialise the channel of a BCCU module + */ +void XMC_BCCU_CH_Init (XMC_BCCU_CH_t *const channel, const XMC_BCCU_CH_CONFIG_t *const config) +{ + channel->CHCONFIG = config->chconfig; + + channel->PKCMP = config->pkcmp; + + channel->PKCNTR = config->pkcntr; +} + +/* + * API to configure channel trigger edge and force trigger edge + */ +void XMC_BCCU_CH_ConfigTrigger (XMC_BCCU_CH_t *const channel, XMC_BCCU_CH_TRIG_EDGE_t edge, uint32_t force_trig_en) +{ + uint32_t reg; + channel->CHCONFIG &= ~(uint32_t)(BCCU_CH_CHCONFIG_TRED_Msk | BCCU_CH_CHCONFIG_ENFT_Msk); + + reg = ((uint32_t)edge << BCCU_CH_CHCONFIG_TRED_Pos); + reg |= (uint32_t)(force_trig_en << BCCU_CH_CHCONFIG_ENFT_Pos); + channel->CHCONFIG |= reg; +} + +/* + * API to configure the linear walker clock prescaler factor of a BCCU channel + */ +void XMC_BCCU_CH_SetLinearWalkPrescaler (XMC_BCCU_CH_t *const channel, uint32_t clk_div) +{ + channel->CHCONFIG &= ~(uint32_t)(BCCU_CH_CHCONFIG_LINPRES_Msk); + channel->CHCONFIG |= (uint32_t)(clk_div << BCCU_CH_CHCONFIG_LINPRES_Pos); +} + +/* + * API to set channel target intensity + */ +void XMC_BCCU_CH_SetTargetIntensity (XMC_BCCU_CH_t *const channel, uint32_t ch_int) +{ + channel->INTS = ch_int; +} + +/* + * API to retrieve the channel actual intensity + */ +uint32_t XMC_BCCU_CH_ReadIntensity (XMC_BCCU_CH_t *const channel) +{ + return (uint32_t)(channel->INT & BCCU_CH_INT_CHINT_Msk); +} + +/* + * API to enable packer. Also configures packer threshold, off-time and on-time compare levels + */ +void XMC_BCCU_CH_EnablePacker (XMC_BCCU_CH_t *const channel, uint32_t thresh, uint32_t off_comp, uint32_t on_comp) +{ + channel->CHCONFIG &= ~(uint32_t)(BCCU_CH_CHCONFIG_PEN_Msk | BCCU_CH_CHCONFIG_PKTH_Msk); + channel->CHCONFIG |= thresh; + channel->PKCMP = (off_comp | (uint32_t)(on_comp << BCCU_CH_PKCMP_ONCMP_Pos)); + channel->CHCONFIG |= (uint32_t)BCCU_CH_CHCONFIG_PEN_Msk; +} + +/* + * API to configure packer threshold + */ +void XMC_BCCU_CH_SetPackerThreshold (XMC_BCCU_CH_t *const channel, uint32_t val) +{ + channel->CHCONFIG &= ~(uint32_t)(BCCU_CH_CHCONFIG_PKTH_Msk); + channel->CHCONFIG |= val; +} + +/* + * API to configure packer off-time compare level + */ +void XMC_BCCU_CH_SetPackerOffCompare (XMC_BCCU_CH_t *const channel, uint32_t level) +{ + channel->PKCMP &= ~(uint32_t)(BCCU_CH_PKCMP_OFFCMP_Msk); + channel->PKCMP |= level; +} + +/* + * API to configure packer on-time compare level. + */ +void XMC_BCCU_CH_SetPackerOnCompare (XMC_BCCU_CH_t *const channel, uint32_t level) +{ + channel->PKCMP &= ~(uint32_t)(BCCU_CH_PKCMP_ONCMP_Msk); + channel->PKCMP |= (level << BCCU_CH_PKCMP_ONCMP_Pos); +} + +/* + * API to disable a packer. + */ +void XMC_BCCU_CH_DisablePacker (XMC_BCCU_CH_t *const channel) +{ + channel->CHCONFIG &= ~(uint32_t)(BCCU_CH_CHCONFIG_PEN_Msk); +} + +/* + * API to set packer off-time counter value + */ +void XMC_BCCU_CH_SetPackerOffCounter (XMC_BCCU_CH_t *const channel, uint32_t cnt_val) +{ + channel->PKCNTR &= ~(uint32_t)(BCCU_CH_PKCNTR_OFFCNTVAL_Msk); + channel->PKCNTR |= cnt_val; +} + +/* + * API to set packer on-time counter value + */ +void XMC_BCCU_CH_SetPackerOnCounter (XMC_BCCU_CH_t *const channel, uint32_t cnt_val) +{ + channel->PKCNTR &= ~(uint32_t)(BCCU_CH_PKCNTR_ONCNTVAL_Msk); + channel->PKCNTR |= (uint32_t)(cnt_val << BCCU_CH_PKCNTR_ONCNTVAL_Pos); +} + +/* + * API to select the dimming engine of a channel + */ +void XMC_BCCU_CH_SelectDimEngine (XMC_BCCU_CH_t *const channel, XMC_BCCU_CH_DIMMING_SOURCE_t sel) +{ + channel->CHCONFIG &= ~(uint32_t)(BCCU_CH_CHCONFIG_DSEL_Msk); + channel->CHCONFIG |= ((uint32_t)sel << BCCU_CH_CHCONFIG_DSEL_Pos); +} + +/* + * API to bypass the dimming engine. And the brightness of channel is depending only on + * intensity of the channel. + */ +void XMC_BCCU_CH_EnableDimmingBypass (XMC_BCCU_CH_t *const channel) +{ + channel->CHCONFIG |= (uint32_t)(BCCU_CH_CHCONFIG_DBP_Msk); +} + +/* + * API to disable the bypass of dimming engine. And the brightness of channel is depending + * on intensity of channel and dimming level of dimming engine. + */ +void XMC_BCCU_CH_DisableDimmingBypass (XMC_BCCU_CH_t *const channel) +{ + channel->CHCONFIG &= ~(uint32_t)(BCCU_CH_CHCONFIG_DBP_Msk); +} + +/* + * API to initialise a specific dimming engine of a BCCU module + */ +void XMC_BCCU_DIM_Init (XMC_BCCU_DIM_t *const dim_engine, const XMC_BCCU_DIM_CONFIG_t *const config) +{ + dim_engine->DTT = config->dtt; +} + +/* + * API to set dimming engine target dim level + */ +void XMC_BCCU_DIM_SetTargetDimmingLevel (XMC_BCCU_DIM_t *const dim_engine, uint32_t level) +{ + dim_engine->DLS = level; +} + +/* + * API to configure the dimming clock prescaler factor of a dimming engine + */ +void XMC_BCCU_DIM_SetDimDivider (XMC_BCCU_DIM_t *const dim_engine, uint32_t div) +{ + dim_engine->DTT &= ~(uint32_t)(BCCU_DE_DTT_DIMDIV_Msk); + dim_engine->DTT |= div; +} + +/* + * API to configure the dimming curve + */ +void XMC_BCCU_DIM_ConfigDimCurve (XMC_BCCU_DIM_t *const dim_engine, uint32_t dither_en, XMC_BCCU_DIM_CURVE_t sel) +{ + uint32_t reg; + dim_engine->DTT &= ~(uint32_t)(BCCU_DE_DTT_DTEN_Msk | BCCU_DE_DTT_CSEL_Msk); + reg = (uint32_t)(dither_en << BCCU_DE_DTT_DTEN_Pos); + reg |= ((uint32_t)sel << BCCU_DE_DTT_CSEL_Pos); + dim_engine->DTT |= reg; +} + +#endif /* BCCU0 */ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_can.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_can.c index 4748c42a..4bf50f8a 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_can.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_can.c @@ -1,12 +1,12 @@ /** * @file xmc_can.c - * @date 2015-10-27 + * @date 2016-06-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -53,6 +53,11 @@ * 2015-09-08: * - Fixed bug in XMC_CAN_Init()
* + * 2016-06-07: + * - Changed XMC_CAN_AllocateMOtoNodeList to wait for ready status of list controller + * + * 2015-06-20: + * - Fixed bug in XMC_CAN_MO_Config()
* @endcond * */ @@ -205,13 +210,14 @@ void XMC_CAN_NODE_NominalBitTimeConfigure (XMC_CAN_NODE_t *const can_node, /* Function to allocate message object from free list to node list */ void XMC_CAN_AllocateMOtoNodeList(XMC_CAN_t *const obj, const uint8_t node_num, const uint8_t mo_num) { - /* Panel Command for allocation of MO to node list */ - XMC_CAN_PanelControl(obj, XMC_CAN_PANCMD_STATIC_ALLOCATE,mo_num,(node_num + 1U)); - /* wait until panel as done the command */ - while (obj->PANCTR & CAN_PANCTR_BUSY_Msk) + /* wait while panel operation is in progress. */ + while (XMC_CAN_IsPanelControlReady(obj) == false) { /*Do nothing*/ }; + + /* Panel Command for allocation of MO to node list */ + XMC_CAN_PanelControl(obj, XMC_CAN_PANCMD_STATIC_ALLOCATE,mo_num,(node_num + 1U)); } /* Disable XMC_CAN Peripheral */ @@ -433,10 +439,13 @@ void XMC_CAN_MO_SetAcceptanceMask(XMC_CAN_MO_t *const can_mo,const uint32_t can_ void XMC_CAN_MO_Config(const XMC_CAN_MO_t *const can_mo) { uint32_t reg; + /* Configure MPN */ uint32_t num = ((uint32_t)(can_mo->can_mo_ptr) - CAN_BASE - 0x1000U)/0x0020U; - can_mo->can_mo_ptr->MOIPR = (((uint32_t)(num/32) << (CAN_MO_MOIPR_MPN_Pos + 5U)) | ((uint32_t)(num%32) << CAN_MO_MOIPR_MPN_Pos)); - + uint32_t set = (((uint32_t)(num/32) << (CAN_MO_MOIPR_MPN_Pos + 5U)) | ((uint32_t)(num%32) << CAN_MO_MOIPR_MPN_Pos)); + can_mo->can_mo_ptr->MOIPR &= ~(CAN_MO_MOIPR_MPN_Msk); + can_mo->can_mo_ptr->MOIPR |= set; + if (((can_mo->can_id_mode != (uint32_t) XMC_CAN_FRAME_TYPE_STANDARD_11BITS) && (can_mo->can_id_mode != (uint32_t) XMC_CAN_FRAME_TYPE_EXTENDED_29BITS)) || ((can_mo->can_mo_type != XMC_CAN_MO_TYPE_RECMSGOBJ) && diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ccu4.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ccu4.c index 0bf274b4..b2afb166 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ccu4.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ccu4.c @@ -1,12 +1,12 @@ /** * @file xmc_ccu4.c - * @date 2015-10-27 + * @date 2015-10-07 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ccu8.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ccu8.c index 01da1e63..8a1cd615 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ccu8.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ccu8.c @@ -1,12 +1,12 @@ /** * @file xmc_ccu8.c - * @date 2015-10-27 + * @date 2015-10-07 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_common.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_common.c index 55f92844..174a85dc 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_common.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_common.c @@ -1,12 +1,12 @@ /** * @file xmc_common.c - * @date 2015-10-27 + * @date 2015-02-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -58,7 +58,7 @@ struct list *******************************************************************************/ #if defined(XMC_ASSERT_ENABLE) && !defined(XMC_USER_ASSERT_FUNCTION) -void XMC_AssertHandler(const char *const msg, const char *const file, uint32_t line) +__WEAK void XMC_AssertHandler(const char *const msg, const char *const file, uint32_t line) { while(1) { diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_dac.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_dac.c index 3d09a82c..2325e1fd 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_dac.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_dac.c @@ -1,12 +1,12 @@ /** * @file xmc_dac.c - * @date 2015-10-27 + * @date 2015-06-19 * * @cond ********************************************************************************** - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_dma.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_dma.c index 5947f097..d4f0b934 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_dma.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_dma.c @@ -1,13 +1,13 @@ /** * @file xmc_dma.c - * @date 2015-10-27 + * @date 2016-04-08 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -54,6 +54,15 @@ * on advanced DMA channels)
* - Updated XMC_DMA_CH_Disable()
* + * 2016-03-09: + * - Optimize write only registers + * + * 2016-04-08: + * - Update XMC_DMA_CH_EnableEvent and XMC_DMA_CH_DisableEvent. + * Write optimization of MASKCHEV + * - Fix XMC_DMA_IRQHandler, clear channel event status before processing the event handler. + * It corrects event losses if the DMA triggered in the event handler finished before returning from handler. + * * @endcond */ @@ -269,12 +278,12 @@ void XMC_DMA_ClearOverrunStatus(XMC_DMA_t *const dma, const uint8_t line) if (dma == XMC_DMA0) { #endif - DLR->OVRCLR |= (uint32_t)(0x1UL << line); + DLR->OVRCLR = (uint32_t)(0x1UL << line); #if defined(GPDMA1) } else { - DLR->OVRCLR |= (uint32_t)(0x100UL << line); + DLR->OVRCLR = (uint32_t)(0x100UL << line); } #endif } @@ -469,7 +478,7 @@ void XMC_DMA_CH_EnableEvent(XMC_DMA_t *const dma, const uint8_t channel, const u { if (event & ((uint32_t)0x1UL << event_idx)) { - dma->MASKCHEV[event_idx * 2UL] |= ((uint32_t)0x101UL << channel); + dma->MASKCHEV[event_idx * 2UL] = ((uint32_t)0x101UL << channel); } } } @@ -483,7 +492,7 @@ void XMC_DMA_CH_DisableEvent(XMC_DMA_t *const dma, const uint8_t channel, const { if (event & ((uint32_t)0x1UL << event_idx)) { - dma->MASKCHEV[event_idx * 2UL] |= ((uint32_t)0x100UL << channel); + dma->MASKCHEV[event_idx * 2UL] = ((uint32_t)0x100UL << channel); } } } @@ -672,16 +681,15 @@ void XMC_DMA_IRQHandler(XMC_DMA_t *const dma) mask = (uint32_t)1U << channel; if ((event & mask) != 0) { - event_handler = dma_event_handlers[channel]; + XMC_DMA_CH_ClearEventStatus(dma, (uint8_t)channel, (uint32_t)XMC_DMA_CH_EVENT_ERROR); /* Call user callback to handle event */ + event_handler = dma_event_handlers[channel]; if (event_handler != NULL) { event_handler(XMC_DMA_CH_EVENT_ERROR); } - - XMC_DMA_CH_ClearEventStatus(dma, (uint8_t)channel, (uint32_t)XMC_DMA_CH_EVENT_ERROR); - + break; } ++channel; @@ -695,18 +703,17 @@ void XMC_DMA_IRQHandler(XMC_DMA_t *const dma) mask = (uint32_t)1U << channel; if (event & mask) { - event_handler = dma_event_handlers[channel]; - - /* Call user callback to handle event */ - if (event_handler != NULL) - { - event_handler(XMC_DMA_CH_EVENT_TRANSFER_COMPLETE); - } - XMC_DMA_CH_ClearEventStatus(dma, (uint8_t)channel, (uint32_t)((uint32_t)XMC_DMA_CH_EVENT_TRANSFER_COMPLETE | (uint32_t)XMC_DMA_CH_EVENT_BLOCK_TRANSFER_COMPLETE | (uint32_t)XMC_DMA_CH_EVENT_SRC_TRANSACTION_COMPLETE | (uint32_t)XMC_DMA_CH_EVENT_DST_TRANSACTION_COMPLETE)); + + /* Call user callback to handle event */ + event_handler = dma_event_handlers[channel]; + if (event_handler != NULL) + { + event_handler(XMC_DMA_CH_EVENT_TRANSFER_COMPLETE); + } break; } @@ -721,17 +728,17 @@ void XMC_DMA_IRQHandler(XMC_DMA_t *const dma) mask = (uint32_t)1U << channel; if (event & mask) { - event_handler = dma_event_handlers[channel]; + XMC_DMA_CH_ClearEventStatus(dma, (uint8_t)channel, (uint32_t)((uint32_t)XMC_DMA_CH_EVENT_BLOCK_TRANSFER_COMPLETE | + (uint32_t)XMC_DMA_CH_EVENT_SRC_TRANSACTION_COMPLETE | + (uint32_t)XMC_DMA_CH_EVENT_DST_TRANSACTION_COMPLETE)); /* Call user callback to handle event */ + event_handler = dma_event_handlers[channel]; if (event_handler != NULL) { event_handler(XMC_DMA_CH_EVENT_BLOCK_TRANSFER_COMPLETE); } - XMC_DMA_CH_ClearEventStatus(dma, (uint8_t)channel, (uint32_t)((uint32_t)XMC_DMA_CH_EVENT_BLOCK_TRANSFER_COMPLETE | - (uint32_t)XMC_DMA_CH_EVENT_SRC_TRANSACTION_COMPLETE | - (uint32_t)XMC_DMA_CH_EVENT_DST_TRANSACTION_COMPLETE)); break; } ++channel; @@ -745,15 +752,14 @@ void XMC_DMA_IRQHandler(XMC_DMA_t *const dma) mask = (uint32_t)1U << channel; if (event & mask) { - event_handler = dma_event_handlers[channel]; + XMC_DMA_CH_ClearEventStatus(dma, (uint8_t)channel, (uint32_t)XMC_DMA_CH_EVENT_SRC_TRANSACTION_COMPLETE); /* Call user callback to handle event */ + event_handler = dma_event_handlers[channel]; if (event_handler != NULL) { event_handler(XMC_DMA_CH_EVENT_SRC_TRANSACTION_COMPLETE); } - - XMC_DMA_CH_ClearEventStatus(dma, (uint8_t)channel, (uint32_t)XMC_DMA_CH_EVENT_SRC_TRANSACTION_COMPLETE); break; } @@ -768,15 +774,14 @@ void XMC_DMA_IRQHandler(XMC_DMA_t *const dma) mask = (uint32_t)1U << channel; if (event & mask) { - event_handler = dma_event_handlers[channel]; + XMC_DMA_CH_ClearEventStatus(dma, (uint8_t)channel, (uint32_t)XMC_DMA_CH_EVENT_DST_TRANSACTION_COMPLETE); /* Call user callback to handle event */ + event_handler = dma_event_handlers[channel]; if (event_handler != NULL) { event_handler(XMC_DMA_CH_EVENT_DST_TRANSACTION_COMPLETE); - } - - XMC_DMA_CH_ClearEventStatus(dma, (uint8_t)channel, (uint32_t)XMC_DMA_CH_EVENT_DST_TRANSACTION_COMPLETE); + } break; } diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_dsd.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_dsd.c index d3258fbe..73b7ba44 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_dsd.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_dsd.c @@ -1,12 +1,12 @@ /** * @file xmc_dsd.c - * @date 2015-10-27 + * @date 2015-09-18 * * @cond ********************************************************************************** - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ebu.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ebu.c index e89a531b..d938b2f4 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ebu.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ebu.c @@ -1,12 +1,12 @@ /** * @file xmc_ebu.c - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ecat.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ecat.c new file mode 100644 index 00000000..40acd30c --- /dev/null +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ecat.c @@ -0,0 +1,198 @@ + +/** + * @file xmc_ecat.c + * @date 2015-10-21 + * + * @cond + ********************************************************************************************************************* + * XMClib v2.1.8 - XMC Peripheral Driver Library + * + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with + * Infineon Technologies AG dave@infineon.com). + ********************************************************************************************************************* + * + * Change History + * -------------- + * + * 2015-12-27: + * - Add clock gating control in enable/disable APIs + * + * 2015-10-21: + * - Initial Version + * + * @endcond + */ + +/******************************************************************************* + * HEADER FILES + *******************************************************************************/ + +#include + +#if defined (ECAT0) + +#include + +/******************************************************************************* + * MACROS + *******************************************************************************/ + +/******************************************************************************* + * API IMPLEMENTATION + *******************************************************************************/ +/* The function defines the access state to the MII management for the PDI interface*/ +__STATIC_INLINE void XMC_ECAT_lRequestPhyAccessToMII(void) +{ + ECAT0->MII_PDI_ACS_STATE |= 0x01; +} + +/* EtherCAT module clock ungating and deassert reset API (Enables ECAT) */ +void XMC_ECAT_Enable(void) +{ + XMC_SCU_CLOCK_UngatePeripheralClock(XMC_SCU_PERIPHERAL_CLOCK_ECAT0); + XMC_SCU_RESET_DeassertPeripheralReset(XMC_SCU_PERIPHERAL_RESET_ECAT0); + + while (XMC_SCU_RESET_IsPeripheralResetAsserted(XMC_SCU_PERIPHERAL_RESET_ECAT0) == true){} +} + +/* EtherCAT module clock gating and assert reset API (Disables ECAT)*/ +void XMC_ECAT_Disable(void) +{ + XMC_SCU_RESET_AssertPeripheralReset(XMC_SCU_PERIPHERAL_RESET_ECAT0); + while (XMC_SCU_RESET_IsPeripheralResetAsserted(XMC_SCU_PERIPHERAL_RESET_ECAT0) == false){} + + XMC_SCU_CLOCK_GatePeripheralClock(XMC_SCU_PERIPHERAL_CLOCK_ECAT0); +} + +/* EtherCAT initialization function */ +void XMC_ECAT_Init(XMC_ECAT_CONFIG_t *const config) +{ + XMC_ECAT_Enable(); + + /* The process memory is not accessible until the ESC Configuration Area is loaded successfully. */ + + /* words 0x0-0x3 */ + ECAT0->EEP_DATA[0U] = config->dword[0U]; + ECAT0->EEP_DATA[1U] = config->dword[1U]; + ECAT0->EEP_CONT_STAT |= (uint16_t)((uint16_t)0x4U << (uint16_t)ECAT_EEP_CONT_STAT_CMD_REG_Pos); + + /* words 0x4-0x7 */ + ECAT0->EEP_DATA[0U] = config->dword[2U]; + ECAT0->EEP_DATA[1U] = config->dword[3U]; + ECAT0->EEP_CONT_STAT |= (uint16_t)((uint16_t)0x4U << (uint16_t)ECAT_EEP_CONT_STAT_CMD_REG_Pos); + + while (ECAT0->EEP_CONT_STAT & ECAT_EEP_CONT_STAT_L_STAT_Msk) + { + /* Wait until the EEPROM_Loaded signal is active */ + } + +} + +/* EtherCAT application event enable API */ +void XMC_ECAT_EnableEvent(uint32_t event) +{ + ECAT0->AL_EVENT_MASK |= event; +} +/* EtherCAT application event disable API */ +void XMC_ECAT_DisableEvent(uint32_t event) +{ + ECAT0->AL_EVENT_MASK &= ~event; +} + +/* EtherCAT application event status reading API */ +uint32_t XMC_ECAT_GetEventStatus(void) +{ + return (ECAT0->AL_EVENT_REQ); +} + +/* EtherCAT SyncManager channel disable function*/ +void XMC_ECAT_DisableSyncManChannel(const uint8_t channel) +{ + ((ECAT0_SM_Type *)(void*)((uint8_t *)(void*)ECAT0_SM0 + (channel * 8U)))->SM_PDI_CTR |= 0x1U; +} + +/* EtherCAT SyncManager channel enable function*/ +void XMC_ECAT_EnableSyncManChannel(const uint8_t channel) +{ + ((ECAT0_SM_Type *)(void*)((uint8_t *)(void*)ECAT0_SM0 + (channel * 8U)))->SM_PDI_CTR &= (uint8_t)(~0x1U); +} + + +/* EtherCAT PHY register read function*/ +XMC_ECAT_STATUS_t XMC_ECAT_ReadPhy(uint8_t phy_addr, uint8_t reg_addr, uint16_t *data) +{ + XMC_ECAT_STATUS_t status; + + XMC_ECAT_lRequestPhyAccessToMII(); + + ECAT0->MII_PHY_ADR = phy_addr; + ECAT0->MII_PHY_REG_ADR = reg_addr; + + ECAT0->MII_CONT_STAT |= 0x0100U; /* read instruction */ + while ((ECAT0->MII_CONT_STAT & ECAT_MII_CONT_STAT_BUSY_Msk) != 0U){} + + if ((ECAT0->MII_CONT_STAT & ECAT_MII_CONT_STAT_ERROR_Msk) != 0U) + { + ECAT0->MII_CONT_STAT &= ~ECAT_MII_CONT_STAT_CMD_REG_Msk; /* Clear error */ + status = XMC_ECAT_STATUS_ERROR; + } + else + { + *data = (uint16_t)ECAT0->MII_PHY_DATA; + status = XMC_ECAT_STATUS_OK; + } + + return status; +} + +/* EtherCAT PHY register write function*/ +XMC_ECAT_STATUS_t XMC_ECAT_WritePhy(uint8_t phy_addr, uint8_t reg_addr, uint16_t data) +{ + XMC_ECAT_STATUS_t status; + + XMC_ECAT_lRequestPhyAccessToMII(); + + ECAT0->MII_PHY_ADR = phy_addr; + ECAT0->MII_PHY_REG_ADR = reg_addr; + ECAT0->MII_PHY_DATA = data; + + ECAT0->MII_CONT_STAT |= 0x0200U; /* write instruction */ + while ((ECAT0->MII_CONT_STAT & ECAT_MII_CONT_STAT_BUSY_Msk) != 0U){} + + if ((ECAT0->MII_CONT_STAT & ECAT_MII_CONT_STAT_ERROR_Msk) != 0U) + { + ECAT0->MII_CONT_STAT &= ~ECAT_MII_CONT_STAT_CMD_REG_Msk; /* Clear error */ + status = XMC_ECAT_STATUS_ERROR; + } + else + { + status = XMC_ECAT_STATUS_OK; + } + + return status; +} + +#endif diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_eru.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_eru.c index 1be4177b..e7eb30cf 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_eru.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_eru.c @@ -1,12 +1,12 @@ /** * @file xmc_eru.c - * @date 2015-10-27 + * @date 2016-03-10 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -42,6 +42,9 @@ * 2015-06-20: * - Removed definition of GetDriverVersion API
* + * 2016-03-10: + * - XMC_ERU_ETL_GetEdgeDetection() API is added to get the configured edge for event generation.
+ * * @endcond */ @@ -190,6 +193,14 @@ void XMC_ERU_ETL_SetEdgeDetection(XMC_ERU_t *const eru, eru->EXICON_b[channel].ED = (uint8_t)edge_detection; } +/* Returns the configured event trigger edge/s by reading (RE, FE) bits of EXICONx(x = [0 to 3]) register. */ +XMC_ERU_ETL_EDGE_DETECTION_t XMC_ERU_ETL_GetEdgeDetection(XMC_ERU_t *const eru, const uint8_t channel) +{ + XMC_ASSERT("XMC_ERU_ETL_GetEdgeDetection:Invalid Module Pointer", XMC_ERU_CHECK_MODULE_PTR(eru)); + XMC_ASSERT("XMC_ERU_ETL_GetEdgeDetection:Invalid Channel Number", (channel < 4U)); + return ((XMC_ERU_ETL_EDGE_DETECTION_t)(eru->EXICON_b[channel].ED)); +} + /* Set the status flag bit(FL) in EXICONx(x = [0 to 3]). */ void XMC_ERU_ETL_SetStatusFlagMode(XMC_ERU_t *const eru, const uint8_t channel, diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_eth_mac.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_eth_mac.c index a42f37e7..8d04e09d 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_eth_mac.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_eth_mac.c @@ -1,13 +1,13 @@ /** * @file xmc_eth_mac.c - * @date 2015-10-27 + * @date 2016-08-30 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -37,12 +37,24 @@ * Change History * -------------- * + * 2015-06-20: + * - Initial + * * 2015-09-01: * - Add clock gating control in enable/disable APIs * - Add transmit polling if run out of buffers * - * 2015-06-20: - * - Initial + * 2015-11-30: + * - Fix XMC_ETH_MAC_GetRxFrameSize return value in case of errors + * + * 2016-03-16: + * - Fix XMC_ETH_MAC_DisableEvent + * + * 2016-05-19: + * - Changed XMC_ETH_MAC_ReturnTxDescriptor and XMC_ETH_MAC_ReturnRxDescriptor + * + * 2016-08-30: + * - Changed XMC_ETH_MAC_Init() to disable MMC interrupt events * * @endcond */ @@ -82,57 +94,6 @@ #define XMC_ETH_MAC_MDC_DIVIDER_102 (4U << ETH_GMII_ADDRESS_CR_Pos) /**< MDC clock: ETH clock/102 */ #define XMC_ETH_MAC_MDC_DIVIDER_124 (5U << ETH_GMII_ADDRESS_CR_Pos) /**< MDC clock: ETH clock/124 */ -/** - * TDES0 Descriptor TX Packet Control/Status - */ -#define ETH_MAC_DMA_TDES0_OWN (0x80000000U) /**< Own bit 1=DMA, 0=CPU */ -#define ETH_MAC_DMA_TDES0_IC (0x40000000U) /**< Interrupt on competition */ -#define ETH_MAC_DMA_TDES0_LS (0x20000000U) /**< Last segment */ -#define ETH_MAC_DMA_TDES0_FS (0x10000000U) /**< First segment */ -#define ETH_MAC_DMA_TDES0_DC (0x08000000U) /**< Disable CRC */ -#define ETH_MAC_DMA_TDES0_DP (0x04000000U) /**< Disable pad */ -#define ETH_MAC_DMA_TDES0_TTSE (0x02000000U) /**< Transmit time stamp enable */ -#define ETH_MAC_DMA_TDES0_CIC (0x00C00000U) /**< Checksum insertion control */ -#define ETH_MAC_DMA_TDES0_TER (0x00200000U) /**< Transmit end of ring */ -#define ETH_MAC_DMA_TDES0_TCH (0x00100000U) /**< Second address chained */ -#define ETH_MAC_DMA_TDES0_TTSS (0x00020000U) /**< Transmit time stamp status */ -#define ETH_MAC_DMA_TDES0_IHE (0x00010000U) /**< IP header error */ -#define ETH_MAC_DMA_TDES0_ES (0x00008000U) /**< Error summary */ -#define ETH_MAC_DMA_TDES0_JT (0x00004000U) /**< Jabber timeout */ -#define ETH_MAC_DMA_TDES0_FF (0x00002000U) /**< Frame flushed */ -#define ETH_MAC_DMA_TDES0_IPE (0x00001000U) /**< IP payload error */ -#define ETH_MAC_DMA_TDES0_LOC (0x00000800U) /**< Loss of carrier */ -#define ETH_MAC_DMA_TDES0_NC (0x00000400U) /**< No carrier */ -#define ETH_MAC_DMA_TDES0_LC (0x00000200U) /**< Late collision */ -#define ETH_MAC_DMA_TDES0_EC (0x00000100U) /**< Excessive collision */ -#define ETH_MAC_DMA_TDES0_VF (0x00000080U) /**< VLAN frame */ -#define ETH_MAC_DMA_TDES0_CC (0x00000078U) /**< Collision count */ -#define ETH_MAC_DMA_TDES0_ED (0x00000004U) /**< Excessive deferral */ -#define ETH_MAC_DMA_TDES0_UF (0x00000002U) /**< Underflow error */ -#define ETH_MAC_DMA_TDES0_DB (0x00000001U) /**< Deferred bit */ - -/** - * RDES0 Descriptor RX Packet Status - */ -#define ETH_MAC_DMA_RDES0_OWN (0x80000000U) /**< Own bit 1=DMA, 0=CPU */ -#define ETH_MAC_DMA_RDES0_AFM (0x40000000U) /**< Destination address filter fail */ -#define ETH_MAC_DMA_RDES0_FL (0x3FFF0000U) /**< Frame length mask */ -#define ETH_MAC_DMA_RDES0_ES (0x00008000U) /**< Error summary */ -#define ETH_MAC_DMA_RDES0_DE (0x00004000U) /**< Descriptor error */ -#define ETH_MAC_DMA_RDES0_SAF (0x00002000U) /**< Source address filter fail */ -#define ETH_MAC_DMA_RDES0_LE (0x00001000U) /**< Length error */ -#define ETH_MAC_DMA_RDES0_OE (0x00000800U) /**< Overflow error */ -#define ETH_MAC_DMA_RDES0_VLAN (0x00000400U) /**< VLAN tag */ -#define ETH_MAC_DMA_RDES0_FS (0x00000200U) /**< First descriptor */ -#define ETH_MAC_DMA_RDES0_LS (0x00000100U) /**< Last descriptor */ -#define ETH_MAC_DMA_RDES0_TSA (0x00000080U) /**< Timestamp available */ -#define ETH_MAC_DMA_RDES0_LC (0x00000040U) /**< Late collision */ -#define ETH_MAC_DMA_RDES0_FT (0x00000020U) /**< Frame type */ -#define ETH_MAC_DMA_RDES0_RWT (0x00000010U) /**< Receive watchdog timeout */ -#define ETH_MAC_DMA_RDES0_RE (0x00000008U) /**< Receive error */ -#define ETH_MAC_DMA_RDES0_DBE (0x00000004U) /**< Dribble bit error */ -#define ETH_MAC_DMA_RDES0_CE (0x00000002U) /**< CRC error */ -#define ETH_MAC_DMA_RDES0_ESA (0x00000001U) /**< Extended Status/Rx MAC address */ /** * RDES1 Descriptor RX Packet Control @@ -141,6 +102,7 @@ #define ETH_MAC_DMA_RDES1_RER (0x00008000U) /**< Receive end of ring */ #define ETH_MAC_DMA_RDES1_RCH (0x00004000U) /**< Second address chained */ #define ETH_MAC_DMA_RDES1_RBS1 (0x00001FFFU) /**< Receive buffer 1 size */ +#define ETH_MAC_MMC_INTERRUPT_MSK (0x03ffffffU) /**< Bit mask to disable MMMC transmit and receive interrupts*/ /** * Normal MAC events @@ -237,6 +199,10 @@ XMC_ETH_MAC_STATUS_t XMC_ETH_MAC_Init(XMC_ETH_MAC_t *const eth_mac) /* Clear interrupts */ eth_mac->regs->STATUS = 0xFFFFFFFFUL; + /* Disable MMC interrupt events */ + eth_mac->regs->MMC_TRANSMIT_INTERRUPT_MASK = ETH_MAC_MMC_INTERRUPT_MSK; + eth_mac->regs->MMC_RECEIVE_INTERRUPT_MASK = ETH_MAC_MMC_INTERRUPT_MSK; + eth_mac->frame_end = NULL; return status; @@ -325,7 +291,7 @@ XMC_ETH_MAC_STATUS_t XMC_ETH_MAC_SendFrame(XMC_ETH_MAC_t *const eth_mac, const u uint32_t ctrl; XMC_ASSERT("XMC_ETH_MAC_SendFrame:", eth_mac != NULL); - XMC_ASSERT("XMC_ETH_MAC_SendFrame:", eth_mac->regs != ETH0); + XMC_ASSERT("XMC_ETH_MAC_SendFrame:", eth_mac->regs == ETH0); XMC_ASSERT("XMC_ETH_MAC_SendFrame:", (frame != NULL) && (len > 0)); dst = eth_mac->frame_end; @@ -405,7 +371,7 @@ uint32_t XMC_ETH_MAC_ReadFrame(XMC_ETH_MAC_t *const eth_mac, uint8_t *frame, uin uint8_t const *src; XMC_ASSERT("XMC_ETH_MAC_ReadFrame:", eth_mac != NULL); - XMC_ASSERT("XMC_ETH_MAC_ReadFrame:", eth_mac->regs != ETH0); + XMC_ASSERT("XMC_ETH_MAC_ReadFrame:", eth_mac->regs == ETH0); XMC_ASSERT("XMC_ETH_MAC_ReadFrame:", (frame != NULL) && (len > 0)); /* Fast-copy data to packet buffer */ @@ -445,16 +411,18 @@ uint32_t XMC_ETH_MAC_GetRxFrameSize(XMC_ETH_MAC_t *const eth_mac) /* Owned by DMA */ len = 0U; } - - if (((status & ETH_MAC_DMA_RDES0_ES) != 0U) || - ((status & ETH_MAC_DMA_RDES0_FS) == 0U) || - ((status & ETH_MAC_DMA_RDES0_LS) == 0U)) { + else if (((status & ETH_MAC_DMA_RDES0_ES) != 0U) || + ((status & ETH_MAC_DMA_RDES0_FS) == 0U) || + ((status & ETH_MAC_DMA_RDES0_LS) == 0U)) + { /* Error, this block is invalid */ len = 0xFFFFFFFFU; } - - /* Subtract CRC */ - len = ((status & ETH_MAC_DMA_RDES0_FL) >> 16U) - 4U; + else + { + /* Subtract CRC */ + len = ((status & ETH_MAC_DMA_RDES0_FL) >> 16U) - 4U; + } return len; } @@ -633,7 +601,7 @@ void XMC_ETH_MAC_DisableEvent(XMC_ETH_MAC_t *const eth_mac, uint32_t event) eth_mac->regs->INTERRUPT_MASK |= event >> 16U; - event &= (uint16_t)~0xffffU; + event &= 0x7fffU; eth_mac->regs->INTERRUPT_ENABLE &= ~event; } @@ -671,18 +639,26 @@ uint32_t XMC_ETH_MAC_GetEventStatus(const XMC_ETH_MAC_t *const eth_mac) void XMC_ETH_MAC_ReturnRxDescriptor(XMC_ETH_MAC_t *const eth_mac) { eth_mac->rx_desc[eth_mac->rx_index].status |= ETH_MAC_DMA_RDES0_OWN; + eth_mac->rx_index++; + if (eth_mac->rx_index == eth_mac->num_rx_buf) + { + eth_mac->rx_index = 0U; + } } /* Return TX descriptor */ void XMC_ETH_MAC_ReturnTxDescriptor(XMC_ETH_MAC_t *const eth_mac) { - eth_mac->tx_desc[eth_mac->tx_index].status |= ETH_MAC_DMA_TDES0_OWN; -} + eth_mac->tx_ts_index = eth_mac->tx_index; -/* Is TX descriptor owned by DMA? */ -bool XMC_ETH_MAC_IsTxDescriptorOwnedByDma(XMC_ETH_MAC_t *const eth_mac) -{ - return ((eth_mac->tx_desc[eth_mac->tx_index].status & ETH_MAC_DMA_TDES0_OWN) != 0U); + eth_mac->tx_desc[eth_mac->tx_index].status |= ETH_MAC_DMA_TDES0_CIC |ETH_MAC_DMA_TDES0_OWN; + eth_mac->tx_index++; + if (eth_mac->tx_index == eth_mac->num_tx_buf) + { + eth_mac->tx_index = 0U; + } + + eth_mac->frame_end = NULL; } /* Set VLAN tag */ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_fce.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_fce.c index 65b413cf..13a66837 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_fce.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_fce.c @@ -1,12 +1,12 @@ /** * @file xmc_fce.c - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_gpio.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_gpio.c index b8bdd895..2c8dc145 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_gpio.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_gpio.c @@ -1,12 +1,12 @@ /** * @file xmc_gpio.c - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_hrpwm.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_hrpwm.c index cf2a4c84..48258c5e 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_hrpwm.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_hrpwm.c @@ -1,13 +1,13 @@ /** * @file xmc_hrpwm.c - * @date 2015-10-27 + * @date 2015-07-14 * * @cond ********************************************************************************** - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_i2c.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_i2c.c index a6c28847..ad2b810f 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_i2c.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_i2c.c @@ -1,12 +1,12 @@ /** * @file xmc_i2c.c - * @date 2015-10-27 + * @date 2015-10-02 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_i2s.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_i2s.c index da05947d..de0822f2 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_i2s.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_i2s.c @@ -1,12 +1,12 @@ /** * @file xmc_i2s.c - * @date 2015-10-27 + * @date 2015-06-30 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -49,6 +49,16 @@ * 2015-09-28: * - Fixed bugs in the XMC_I2S_CH_Init() and in the ASSERTs
* + * 2015-11-04: + * - Modified the check of XMC_USIC_CH_GetTransmitBufferStatus() in the XMC_I2S_CH_Transmit() API
+ * + * 2016-06-30: + * - Modified XMC_I2S_CH_Init: + * + change default passive level to 0 + * + Call XMC_I2S_CH_SetSystemWordLength() to set the system frame length equal to the frame length. + * - Modified XMC_I2S_CH_SetBaudrate: + * + Optional Master clock output signal generated with a fixed phase relation to SCLK. + * * @endcond * */ @@ -67,7 +77,8 @@ /********************************************************************************************************************* * MACROS ********************************************************************************************************************/ -#define XMC_I2S_CH_OVERSAMPLING (2UL) +/* To take into account the SCLK divider by 2 and the PPPEN divider (see Divider Mode Counter figure in RM) */ +#define XMC_I2S_CH_OVERSAMPLING (4UL) /********************************************************************************************************************* * API IMPLEMENTATION @@ -87,12 +98,10 @@ void XMC_I2S_CH_Init(XMC_USIC_CH_t *const channel, const XMC_I2S_CH_CONFIG_t *co } /* Configuration of USIC Shift Control */ /* Transmission Mode (TRM) = 1 */ - /* Passive Data Level (PDL) = 1 */ - channel->SCTR = (uint32_t)(((uint32_t)(USIC_CH_SCTR_PDL_Msk | - (uint32_t)(0x3UL << USIC_CH_SCTR_TRM_Pos)) | - (uint32_t)((uint32_t)((uint32_t)config->frame_length -1U) << USIC_CH_SCTR_FLE_Pos)) | - (uint32_t)((uint32_t)((uint32_t)((uint32_t)config->data_bits -1U) << USIC_CH_SCTR_WLE_Pos) | - (uint32_t)USIC_CH_SCTR_SDIR_Msk)); + channel->SCTR = (uint32_t)(0x3UL << USIC_CH_SCTR_TRM_Pos) | + (uint32_t)((config->frame_length -1U) << USIC_CH_SCTR_FLE_Pos) | + (uint32_t)((config->data_bits - 1U) << USIC_CH_SCTR_WLE_Pos) | + USIC_CH_SCTR_SDIR_Msk; /* Configuration of USIC Transmit Control/Status Register */ /* TBUF Data Enable (TDEN) = 1 */ @@ -111,10 +120,14 @@ void XMC_I2S_CH_Init(XMC_USIC_CH_t *const channel, const XMC_I2S_CH_CONFIG_t *co /* Configuration of Protocol Control Register */ channel->PCR_IISMode = (uint32_t)USIC_CH_PCR_IISMode_WAGEN_Msk; } + /* Configuration of Protocol Control Register */ channel->PCR_IISMode |= (uint32_t)(USIC_CH_PCR_IISMode_DTEN_Msk | (uint32_t)config->wa_inversion) | ((uint32_t)((uint32_t)config->data_delayed_sclk_periods - 1U) << USIC_CH_PCR_IISMode_TDEL_Pos); + + XMC_I2S_CH_SetSystemWordLength(channel, config->frame_length); + /* Clear protocol status */ channel->PSCR = 0xFFFFFFFFUL; } @@ -131,7 +144,8 @@ XMC_I2S_CH_STATUS_t XMC_I2S_CH_SetBaudrate(XMC_USIC_CH_t *const channel, const u if (XMC_USIC_CH_SetBaudrate(channel, rate, XMC_I2S_CH_OVERSAMPLING) == XMC_USIC_CH_STATUS_OK) { channel->BRG = (uint32_t)((channel->BRG & ~(USIC_CH_BRG_CTQSEL_Msk)) | - (0x2UL << USIC_CH_BRG_CTQSEL_Pos)); + (0x2UL << USIC_CH_BRG_CTQSEL_Pos)) | + USIC_CH_BRG_PPPEN_Msk; status = XMC_I2S_CH_STATUS_OK; } @@ -192,7 +206,7 @@ void XMC_I2S_CH_Transmit(XMC_USIC_CH_t *const channel, const uint16_t data, cons /* Check FIFO size */ if ((channel->TBCTR & USIC_CH_TBCTR_SIZE_Msk) == 0U) { - while((uint32_t)XMC_USIC_CH_GetTransmitBufferStatus(channel) & (uint32_t)XMC_USIC_CH_TBUF_STATUS_BUSY) + while((uint32_t)XMC_USIC_CH_GetTransmitBufferStatus(channel) == (uint32_t)XMC_USIC_CH_TBUF_STATUS_BUSY) { } diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ledts.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ledts.c index 2ea5602f..6377321a 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ledts.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_ledts.c @@ -1,12 +1,12 @@ /** * @file xmc_ledts.c - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_math.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_math.c new file mode 100644 index 00000000..dc436810 --- /dev/null +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_math.c @@ -0,0 +1,463 @@ + +/** + * @file xmc_math.c + * @date 2015-10-08 + * + * @cond + ********************************************************************************** + * XMClib v2.1.8 - XMC Peripheral Driver Library + * + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification,are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * To improve the quality of the software, users are encouraged to share + * modifications, enhancements or bug fixes with Infineon Technologies AG + * dave@infineon.com). + ********************************************************************************** + * + * Change History + * -------------- + * + * 2015-06-20: + * - Removed version macros and declaration of GetDriverVersion API
+ * - Updated copyright and change history section. + * + * 2015-09-23: + * - Added SQRT functions + * + * 2015-10-08: + * - Return values for sin(), cos(), sinh(), cosh(), arctan() are corrected. + * + * @endcond + * + */ + +/** + * + * @brief MATH driver - API implementation for XMC13 family MATH libraries.
+ * + * Detailed description of file
+ * APIs provided in this file cover the following functional blocks of MATH:
+ * + */ + +/********************************************************************************************************************* + * HEADER FILES + ********************************************************************************************************************/ +#include + +#if defined (MATH) +/********************************************************************************************************************* + * MACROS + ********************************************************************************************************************/ +/* Reciprocal of Circular gain in XMC_MATH_Q0_23_t format ((2^23)/1.646760258121) */ +#define XMC_MATH_RECIPROC_CIRCULAR_GAIN_IN_Q023 (0x4DBA76U) +/* Reciprocal of Hyperbolic gain in XMC_MATH_Q1_22_t format ((2^22)/0.828159360960) */ +#define XMC_MATH_RECIPROC_HYPERBOLIC_GAIN_IN_Q1_22 (0x4D47A1U) +/* Signed division is selected */ +#define XMC_MATH_SIGNED_DIVISION ((uint32_t) 0 << MATH_DIVCON_USIGN_Pos) +/* Unsigned division is selected */ +#define XMC_MATH_UNSIGNED_DIVISION ((uint32_t) 1 << MATH_DIVCON_USIGN_Pos) + +/********************************************************************************************************************* + * ENUMS + ********************************************************************************************************************/ + +/********************************************************************************************************************* + * GLOBAL DATA + ********************************************************************************************************************/ + +/********************************************************************************************************************* + * DATA STRUCTURES + ********************************************************************************************************************/ + +/********************************************************************************************************************* + * LOCAL ROUTINES + ********************************************************************************************************************/ + +/********************************************************************************************************************* + * API IMPLEMENTATION - Utility functions + ********************************************************************************************************************/ + +/* Utility function to check if the DIV unit is busy */ +bool XMC_MATH_DIV_IsBusy(void) +{ + bool status; + if (MATH->DIVST & MATH_DIVST_BSY_Msk) + { + status = true; /* DIV unit is busy running a division operation */ + } + else + { + status = false; /* DIV unit is idle */ + } + + return (status); +} + +/* Utility function to check if the CORDIC unit is busy */ +bool XMC_MATH_CORDIC_IsBusy(void) +{ + bool status; + if (MATH->STATC & MATH_STATC_BSY_Msk) + { + status = true; /* CORDIC unit is busy running an operation */ + } + else + { + status = false; /* CORDIC unit is idle */ + } + + return (status); +} + +/* This functions returns the status of a requested event */ +bool XMC_MATH_GetEventStatus(const XMC_MATH_EVENT_t event) +{ + bool status; + if (MATH->EVFR & (uint32_t) event) + { + status = true; /* Requested event has been detected */ + } + else + { + status = false; /* Requested event has not been detected */ + } + return (status); +} + +#ifndef XMC_MATH_DISABLE_DIV_ABI +/*********************************************************************************************************************** + * API IMPLEMENTATION - aeabi routines + **********************************************************************************************************************/ +/* This function performs unsigned integer division */ +uint32_t __aeabi_uidiv(uint32_t dividend, uint32_t divisor) +{ + MATH->DIVCON = XMC_MATH_UNSIGNED_DIVISION; + MATH->DVD = dividend; + MATH->DVS = divisor; + + return ((uint32_t) MATH->QUOT); +} + +/* This function performs signed integer division */ +int32_t __aeabi_idiv(int32_t dividend, int32_t divisor) +{ + MATH->DIVCON = XMC_MATH_SIGNED_DIVISION; + MATH->DVD = dividend; + MATH->DVS = divisor; + + return ((int32_t) MATH->QUOT); +} + +/* This function performs unsigned integer division modulo */ +uint64_t __aeabi_uidivmod(uint32_t dividend, uint32_t divisor) +{ + uint64_t remainder; + + MATH->DIVCON = XMC_MATH_UNSIGNED_DIVISION; + MATH->DVD = dividend; + MATH->DVS = divisor; + + remainder = ((uint64_t) MATH->RMD) << 32U; + return (remainder | MATH->QUOT); +} + +/* This function performs signed integer division modulo */ +int64_t __aeabi_idivmod(int32_t dividend, int32_t divisor) +{ + uint64_t remainder; + uint64_t result; + + MATH->DIVCON = XMC_MATH_SIGNED_DIVISION; + MATH->DVD = dividend; + MATH->DVS = divisor; + + remainder = ((uint64_t) MATH->RMD) << 32U; + result = (remainder | MATH->QUOT); + return ((int64_t) result); +} +#endif + +/*********************************************************************************************************************** + * API IMPLEMENTATION - Blocking functions + **********************************************************************************************************************/ +/* This function computes the cosine of a given angle in radians */ +XMC_MATH_Q0_23_t XMC_MATH_CORDIC_Cos(XMC_MATH_Q0_23_t angle_in_radians) +{ + int32_t result; + MATH->STATC = 0U; /* Clear register */ + MATH->CON = (uint32_t) XMC_MATH_CORDIC_OPERATING_MODE_CIRCULAR + \ + (uint32_t) XMC_MATH_CORDIC_ROTVEC_MODE_ROTATION; + MATH->CORDZ = ((uint32_t) angle_in_radians) << MATH_CORDZ_DATA_Pos; + MATH->CORDY = 0U; /* Clear register */ + MATH->CORDX = XMC_MATH_RECIPROC_CIRCULAR_GAIN_IN_Q023 << MATH_CORDX_DATA_Pos; + result = ((int32_t)MATH->CORRX) >> MATH_CORRX_RESULT_Pos; + return ((XMC_MATH_Q0_23_t) result); +} + +/* This function computes the sine of a given angle in radians */ +XMC_MATH_Q0_23_t XMC_MATH_CORDIC_Sin(XMC_MATH_Q0_23_t angle_in_radians) +{ + int32_t result; + MATH->STATC = 0U; /* Clear register */ + MATH->CON = (uint32_t) XMC_MATH_CORDIC_OPERATING_MODE_CIRCULAR + \ + (uint32_t) XMC_MATH_CORDIC_ROTVEC_MODE_ROTATION; + MATH->CORDZ = ((uint32_t)angle_in_radians) << MATH_CORDZ_DATA_Pos; + MATH->CORDY = 0U; /* Clear register */ + MATH->CORDX = XMC_MATH_RECIPROC_CIRCULAR_GAIN_IN_Q023 << MATH_CORDX_DATA_Pos; + result = ((int32_t)MATH->CORRY) >> MATH_CORRY_RESULT_Pos; + return ((XMC_MATH_Q0_23_t) result); +} + +/* This function computes the tangent of a given angle in radians */ +XMC_MATH_Q0_11_t XMC_MATH_CORDIC_Tan(XMC_MATH_Q0_23_t angle_in_radians) +{ + uint32_t result; + MATH->GLBCON = (uint32_t) XMC_MATH_DIV_DVDRC_CORRY_IS_SOURCE + \ + (uint32_t) XMC_MATH_DIV_DVSRC_CORRX_IS_SOURCE; /* Chain the results of CORDIC operation to DIV unit */ + MATH->DIVCON = (uint32_t) 11 << MATH_DIVCON_DVSSRC_Pos; /* Right Shifts Divisor by 11 places prior to division */ + MATH->STATC = 0U; /* Clear register */ + MATH->CON = (uint32_t) XMC_MATH_CORDIC_OPERATING_MODE_CIRCULAR + \ + (uint32_t) XMC_MATH_CORDIC_ROTVEC_MODE_ROTATION; + MATH->CORDZ = ((uint32_t)angle_in_radians) << MATH_CORDZ_DATA_Pos; + MATH->CORDY = 0U; /* Clear register */ + MATH->CORDX = XMC_MATH_RECIPROC_CIRCULAR_GAIN_IN_Q023 << MATH_CORDX_DATA_Pos; + result = MATH->QUOT; + return ((XMC_MATH_Q0_11_t) result); +} + +/* This function computes the arc tangent of a given angle in radians */ +XMC_MATH_Q0_23_t XMC_MATH_CORDIC_ArcTan(XMC_MATH_Q8_15_t x, XMC_MATH_Q8_15_t y) +{ + uint32_t result; + MATH->STATC = 0U; /* Clear register */ + MATH->CON = (uint32_t) XMC_MATH_CORDIC_OPERATING_MODE_CIRCULAR; + MATH->CORDZ = 0U; /* Clear register */ + MATH->CORDY = ((uint32_t) y) << MATH_CORDY_DATA_Pos; + MATH->CORDX = ((uint32_t) x) << MATH_CORDX_DATA_Pos; + result = ((int32_t)MATH->CORRZ) >> MATH_CORRZ_RESULT_Pos; + return ((XMC_MATH_Q0_23_t) result); +} + +/* This function computes the hyperbolic cosine of a given angle in radians */ +XMC_MATH_Q1_22_t XMC_MATH_CORDIC_Cosh(XMC_MATH_Q0_23_t angle_in_radians) +{ + int32_t result; + MATH->STATC = 0U; /* Clear register */ + MATH->CON = (uint32_t) XMC_MATH_CORDIC_OPERATING_MODE_HYPERBOLIC + \ + (uint32_t) XMC_MATH_CORDIC_ROTVEC_MODE_ROTATION; + MATH->CORDZ = ((uint32_t) angle_in_radians) << MATH_CORDZ_DATA_Pos; + MATH->CORDY = 0U; /* Clear register */ + MATH->CORDX = XMC_MATH_RECIPROC_HYPERBOLIC_GAIN_IN_Q1_22 << MATH_CORDX_DATA_Pos; + result = ((int32_t)MATH->CORRX) >> MATH_CORRX_RESULT_Pos; + return ((XMC_MATH_Q1_22_t) result); +} + +/* This function computes the hyperbolic sine of a given angle in radians */ +XMC_MATH_Q1_22_t XMC_MATH_CORDIC_Sinh(XMC_MATH_Q0_23_t angle_in_radians) +{ + int32_t result; + MATH->STATC = 0U; /* Clear register */ + MATH->CON = (uint32_t) XMC_MATH_CORDIC_OPERATING_MODE_HYPERBOLIC + \ + (uint32_t) XMC_MATH_CORDIC_ROTVEC_MODE_ROTATION; + MATH->CORDZ = ((uint32_t)angle_in_radians) << MATH_CORDZ_DATA_Pos; + MATH->CORDY = 0U; /* Clear register */ + MATH->CORDX = XMC_MATH_RECIPROC_HYPERBOLIC_GAIN_IN_Q1_22 << MATH_CORDX_DATA_Pos; + result = ((int32_t)MATH->CORRY) >> MATH_CORRY_RESULT_Pos; + return ((XMC_MATH_Q1_22_t) result); +} + +/* This function computes the hyperbolic tangent of a given angle in radians */ +XMC_MATH_Q0_11_t XMC_MATH_CORDIC_Tanh(XMC_MATH_Q0_23_t angle_in_radians) +{ + uint32_t result; + MATH->GLBCON = (uint32_t) XMC_MATH_DIV_DVDRC_CORRY_IS_SOURCE + \ + (uint32_t) XMC_MATH_DIV_DVSRC_CORRX_IS_SOURCE; /* Chain the results of CORDIC operation to DIV unit */ + MATH->DIVCON = (uint32_t) 11 << MATH_DIVCON_DVSSRC_Pos; /* Right Shifts Divisor by 11 places prior to division */ + MATH->STATC = 0U; /* Clear register */ + MATH->CON = (uint32_t) XMC_MATH_CORDIC_OPERATING_MODE_HYPERBOLIC + \ + (uint32_t) XMC_MATH_CORDIC_ROTVEC_MODE_ROTATION; + MATH->CORDZ = ((uint32_t) angle_in_radians) << MATH_CORDZ_DATA_Pos; + MATH->CORDY = 0U; /* Clear register */ + MATH->CORDX = XMC_MATH_RECIPROC_HYPERBOLIC_GAIN_IN_Q1_22 << MATH_CORDX_DATA_Pos; + result = MATH->QUOT; + return ((XMC_MATH_Q0_11_t) result); +} + +/*********************************************************************************************************************** + * API IMPLEMENTATION - Non blocking functions + **********************************************************************************************************************/ +/* This function computes the cosine of a given angle in radians */ +void XMC_MATH_CORDIC_CosNB(XMC_MATH_Q0_23_t angle_in_radians) +{ + MATH->STATC = 0U; /* Clear register */ + MATH->CON = (uint32_t) XMC_MATH_CORDIC_OPERATING_MODE_CIRCULAR + \ + (uint32_t) XMC_MATH_CORDIC_ROTVEC_MODE_ROTATION; + MATH->CORDZ = ((uint32_t) angle_in_radians) << MATH_CORDZ_DATA_Pos; + MATH->CORDY = 0U; /* Clear register */ + MATH->CORDX = XMC_MATH_RECIPROC_CIRCULAR_GAIN_IN_Q023 << MATH_CORDX_DATA_Pos; +} + +/* This function computes the sine of a given angle in radians */ +void XMC_MATH_CORDIC_SinNB(XMC_MATH_Q0_23_t angle_in_radians) +{ + MATH->STATC = 0U; /* Clear register */ + MATH->CON = (uint32_t) XMC_MATH_CORDIC_OPERATING_MODE_CIRCULAR + \ + (uint32_t) XMC_MATH_CORDIC_ROTVEC_MODE_ROTATION; + MATH->CORDZ = ((uint32_t)angle_in_radians) << MATH_CORDZ_DATA_Pos; + MATH->CORDY = 0U; /* Clear register */ + MATH->CORDX = XMC_MATH_RECIPROC_CIRCULAR_GAIN_IN_Q023 << MATH_CORDX_DATA_Pos; +} + +/* This function computes the tangent of a given angle in radians */ +void XMC_MATH_CORDIC_TanNB(XMC_MATH_Q0_23_t angle_in_radians) +{ + MATH->GLBCON = (uint32_t) XMC_MATH_DIV_DVDRC_CORRY_IS_SOURCE + \ + (uint32_t) XMC_MATH_DIV_DVSRC_CORRX_IS_SOURCE; /* Chain the results of CORDIC operation to DIV unit */ + MATH->DIVCON = (uint32_t) 11 << MATH_DIVCON_DVSSRC_Pos; /* Right Shifts Divisor by 11 places prior to division */ + + MATH->STATC = 0U; /* Clear register */ + MATH->CON = (uint32_t) XMC_MATH_CORDIC_OPERATING_MODE_CIRCULAR + \ + (uint32_t) XMC_MATH_CORDIC_ROTVEC_MODE_ROTATION; + MATH->CORDZ = ((uint32_t)angle_in_radians) << MATH_CORDZ_DATA_Pos; + MATH->CORDY = 0U; /* Clear register */ + MATH->CORDX = XMC_MATH_RECIPROC_CIRCULAR_GAIN_IN_Q023 << MATH_CORDX_DATA_Pos; +} + +/* This function computes the arc tangent of a given value */ +void XMC_MATH_CORDIC_ArcTanNB(XMC_MATH_Q8_15_t x, XMC_MATH_Q8_15_t y) +{ + MATH->STATC = 0U; /* Clear register */ + MATH->CON = (uint32_t) XMC_MATH_CORDIC_OPERATING_MODE_CIRCULAR; + MATH->CORDZ = 0U; /* Clear register */ + MATH->CORDY = ((uint32_t) y) << MATH_CORDY_DATA_Pos; + MATH->CORDX = ((uint32_t) x) << MATH_CORDX_DATA_Pos; +} + +/* This function computes the hyperbolic cosine of a given angle in radians */ +void XMC_MATH_CORDIC_CoshNB(XMC_MATH_Q0_23_t angle_in_radians) +{ + MATH->STATC = 0U; /* Clear register */ + MATH->CON = (uint32_t) XMC_MATH_CORDIC_OPERATING_MODE_HYPERBOLIC + \ + (uint32_t) XMC_MATH_CORDIC_ROTVEC_MODE_ROTATION; + MATH->CORDZ = ((uint32_t)angle_in_radians) << MATH_CORDZ_DATA_Pos; + MATH->CORDY = 0U; /* Clear register */ + MATH->CORDX = XMC_MATH_RECIPROC_HYPERBOLIC_GAIN_IN_Q1_22 << MATH_CORDX_DATA_Pos; +} + +/* This function computes the hyperbolic sine of a given angle in radians */ +void XMC_MATH_CORDIC_SinhNB(XMC_MATH_Q0_23_t angle_in_radians) +{ + MATH->STATC = 0U; /* Clear register */ + MATH->CON = (uint32_t) XMC_MATH_CORDIC_OPERATING_MODE_HYPERBOLIC + \ + (uint32_t) XMC_MATH_CORDIC_ROTVEC_MODE_ROTATION; + MATH->CORDZ = ((uint32_t)angle_in_radians) << MATH_CORDZ_DATA_Pos; + MATH->CORDY = 0U; /* Clear register */ + MATH->CORDX = XMC_MATH_RECIPROC_HYPERBOLIC_GAIN_IN_Q1_22 << MATH_CORDX_DATA_Pos; +} + +/* This function computes the hyperbolic tangent of a given angle in radians */ +void XMC_MATH_CORDIC_TanhNB(XMC_MATH_Q0_23_t angle_in_radians) +{ + MATH->GLBCON = (uint32_t) XMC_MATH_DIV_DVDRC_CORRY_IS_SOURCE + \ + (uint32_t) XMC_MATH_DIV_DVSRC_CORRX_IS_SOURCE; /* Chain the results of CORDIC operation to DIV unit */ + MATH->DIVCON = (uint32_t) 11 << MATH_DIVCON_DVSSRC_Pos; /* Right Shifts Divisor by 11 places prior to division */ + MATH->STATC = 0U; /* Clear register */ + MATH->CON = (uint32_t) XMC_MATH_CORDIC_OPERATING_MODE_HYPERBOLIC + \ + (uint32_t) XMC_MATH_CORDIC_ROTVEC_MODE_ROTATION; + MATH->CORDZ = ((uint32_t) angle_in_radians) << MATH_CORDZ_DATA_Pos; + MATH->CORDY = 0U; /* Clear register */ + MATH->CORDX = XMC_MATH_RECIPROC_HYPERBOLIC_GAIN_IN_Q1_22 << MATH_CORDX_DATA_Pos; +} + +/* This function performs division for given two unsigned arguments */ +void XMC_MATH_DIV_UnsignedDivNB(uint32_t dividend, uint32_t divisor) +{ + MATH->DIVCON = XMC_MATH_UNSIGNED_DIVISION; + MATH->DVD = dividend; + MATH->DVS = divisor; +} + +/* This function performs division for given two signed arguments */ +void XMC_MATH_DIV_SignedDivNB(int32_t dividend, int32_t divisor) +{ + MATH->DIVCON = XMC_MATH_SIGNED_DIVISION; + MATH->DVD = dividend; + MATH->DVS = divisor; +} + +/* This function performs modulo operation for given two unsigned arguments */ +void XMC_MATH_DIV_UnsignedModNB(uint32_t dividend, uint32_t divisor) +{ + MATH->DIVCON = XMC_MATH_UNSIGNED_DIVISION; + MATH->DVD = dividend; + MATH->DVS = divisor; +} + +/* This function performs modulo operation for given two signed arguments */ +void XMC_MATH_DIV_SignedModNB(int32_t dividend, int32_t divisor) +{ + MATH->DIVCON = XMC_MATH_SIGNED_DIVISION; + MATH->DVD = dividend; + MATH->DVS = divisor; +} + +int16_t XMC_MATH_CORDIC_Q15_Sqrt(int16_t x) +{ + int32_t temp; + MATH->STATC = 0U; /* Clear register */ + + MATH->CON = (uint32_t)XMC_MATH_CORDIC_OPERATING_MODE_HYPERBOLIC | + (uint32_t)XMC_MATH_CORDIC_ROTVEC_MODE_VECTORING; + + temp = (int32_t)x << 15; /* Q30 to handle numbers > 1.0 */ + + MATH->CORDY = (temp - 0x10000000U); /* x - 0.25 */ + MATH->CORDX = (temp + 0x10000000U); /* x + 0.25 */ + + return (int16_t)(((MATH->CORRX >> 14) * 39568) >> 16); /* Q16 * Q15 */ +} + +int32_t XMC_MATH_CORDIC_Q31_Sqrt(int32_t x) +{ + MATH->STATC = 0U; /* Clear register */ + + MATH->CON = (uint32_t)XMC_MATH_CORDIC_OPERATING_MODE_HYPERBOLIC | + (uint32_t)XMC_MATH_CORDIC_ROTVEC_MODE_VECTORING; + + x >>= 1; /* Q30 to handle numbers > 1.0 */ + + MATH->CORDY = (x - 0x10000000U); /* x - 0.25 */ + MATH->CORDX = (x + 0x10000000U); /* x + 0.25 */ + + return ((MATH->CORRX >> 14) * 39568); /* Q16 * Q15 */ +} + +#endif /* end of #if defined (MATH) */ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_pau.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_pau.c new file mode 100644 index 00000000..2eeed86e --- /dev/null +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_pau.c @@ -0,0 +1,109 @@ +/** + * @file xmc_pau.c + * @date 2015-06-20 + * + * @cond + ********************************************************************************************************************* + * XMClib v2.1.8 - XMC Peripheral Driver Library + * + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with + * Infineon Technologies AG dave@infineon.com). + ********************************************************************************************************************* + * + * Change History + * -------------- + * + * 2015-02-20: + * - Initial
+ * + * 2015-06-20: + * - Removed GetDriverVersion API + * @endcond + * + */ + +/** + * + * @brief PAU driver for XMC1 microcontroller family. + * + */ + +/********************************************************************************************************************* + * HEADER FILES + *********************************************************************************************************************/ +#include "xmc_pau.h" + +#if defined(PAU) + +/********************************************************************************************************************** + * API IMPLEMENTATION + *********************************************************************************************************************/ + +/* + * Enable peripheral access + */ +void XMC_PAU_EnablePeripheralAccess(XMC_PAU_PERIPHERAL_t peripheral) +{ + uint32_t reg_num; + + reg_num = ((uint32_t)peripheral & 0xf0000000U) >> 28U; + XMC_PAU->PRIVDIS[reg_num] &= (uint32_t)~((uint32_t)peripheral & 0x0fffffffUL); +} + +/* + * Disable peripheral access + */ +void XMC_PAU_DisablePeripheralAccess(XMC_PAU_PERIPHERAL_t peripheral) +{ + uint32_t reg_num; + + reg_num = ((uint32_t)peripheral & 0xf0000000U) >> 28U; + XMC_PAU->PRIVDIS[reg_num] |= (uint32_t)((uint32_t)peripheral & 0x0fffffffUL); +} + +/* + * Check if peripheral access is enabled + */ +bool XMC_PAU_IsPeripheralAccessEnabled(XMC_PAU_PERIPHERAL_t peripheral) +{ + uint32_t reg_num; + + reg_num = ((uint32_t)peripheral & 0xf0000000U) >> 28U; + return (bool)(XMC_PAU->PRIVDIS[reg_num] & ((uint32_t)peripheral & 0x0fffffffUL)); +} + +/* + * Check if peripheral is available + */ +bool XMC_PAU_IsPeripheralAvailable(XMC_PAU_PERIPHERAL_t peripheral) +{ + uint32_t reg_num; + + reg_num = ((uint32_t)peripheral & 0xf0000000U) >> 28U; + return (bool)(XMC_PAU->AVAIL[reg_num] & ((uint32_t)peripheral & 0x0fffffffUL)); +} + +#endif /* defined(PAU) */ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_posif.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_posif.c index 7414af91..6977e878 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_posif.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_posif.c @@ -1,12 +1,12 @@ /** * @file xmc_posif.c - * @date 2015-10-27 + * @date 2015-06-19 * * @cond ********************************************************************************** - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_prng.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_prng.c new file mode 100644 index 00000000..0758edc2 --- /dev/null +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_prng.c @@ -0,0 +1,107 @@ + +/** + * @file xmc_prng.c + * @date 2015-06-20 + * + * @cond + ********************************************************************************************************************* + * XMClib v2.1.8 - XMC Peripheral Driver Library + * + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with + * Infineon Technologies AG dave@infineon.com). + ********************************************************************************************************************* + * + * Change History + * -------------- + * + * 2015-02-20: + * - Initial
+ * - Removed GetDriverVersion API
+ * + * 2015-06-20 + * - Removed definition of GetDriverVersion API
+ * + * @endcond + */ + +#include "xmc_prng.h" + +#if defined (PRNG) + +/********************************************************************************************************************* + * API IMPLEMENTATION + *********************************************************************************************************************/ + +/* + * Initializes the PRNG peripheral with the settings in the + * initialization structure XMC_PRNG_INIT_t + */ +XMC_PRNG_INIT_STATUS_t XMC_PRNG_Init(const XMC_PRNG_INIT_t *prng) +{ + volatile uint16_t read_warm_up; + uint16_t reg_val, iter; + XMC_PRNG_INIT_STATUS_t status = XMC_PRNG_INITIALIZED; + + XMC_ASSERT("XMC_PRNG_Init:Null Pointer", (prng != (XMC_PRNG_INIT_t *)NULL)); + + /* Configure block size for key loading mode */ + XMC_PRNG_SetRandomDataBlockSize(XMC_PRNG_RDBS_WORD); + + /* Enable key loading mode */ + XMC_PRNG_EnableKeyLoadingMode(); + + /* Load key words (80 bits) and wait till RDV is set */ + for (iter = (uint16_t)0UL; iter < (uint16_t)5UL; iter++) + { + XMC_PRNG_LoadKeyWords(prng->key_words[iter]); + while (PRNG_CHK_RDV_Msk != XMC_PRNG_CheckValidStatus()); + } + + XMC_PRNG_EnableStreamingMode(); + + /* Warm up phase: Read and discard 64 bits */ + read_warm_up = PRNG->WORD; + read_warm_up = PRNG->WORD; + read_warm_up = PRNG->WORD; + reg_val = PRNG->WORD; + read_warm_up &= reg_val; + + /* Configure block size either byte (8 bit) or word (16 bit) */ + XMC_PRNG_SetRandomDataBlockSize(prng->block_size); + + /* + * Checks for reset value for "random data block size". If reset, + * PRNG is not initialized + */ + if ((uint16_t)XMC_PRNG_RDBS_RESET == (PRNG->CTRL & (uint16_t)PRNG_CTRL_RDBS_Msk)) + { + status = XMC_PRNG_NOT_INITIALIZED; + } + + return status; +} + +#endif /* #if defined (PRNG) */ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_rtc.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_rtc.c index a63520ab..c6670f6e 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_rtc.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_rtc.c @@ -1,12 +1,12 @@ /** * @file xmc_rtc.c - * @date 2015-10-27 + * @date 2015-05-19 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -41,6 +41,10 @@ * * 2015-06-20: * - Removed GetDriverVersion API + * + * 2016-05-19: + * - Added XMC_RTC_SetTimeStdFormat() and XMC_RTC_SetAlarmStdFormat() + * * @endcond * */ @@ -167,6 +171,25 @@ void XMC_RTC_GetTime(XMC_RTC_TIME_t *const time) time->raw1 = RTC->TIM1; } +/* + * Sets the RTC module time values in standard format + */ +void XMC_RTC_SetTimeStdFormat(const struct tm *const stdtime) +{ + + XMC_RTC_TIME_t time; + + time.seconds = stdtime->tm_sec; + time.minutes = stdtime->tm_min; + time.hours = stdtime->tm_hour; + time.days = stdtime->tm_mday - 1; + time.month = stdtime->tm_mon; + time.year = stdtime->tm_year + XMC_RTC_YEAR_OFFSET; + time.daysofweek = stdtime->tm_wday; + + XMC_RTC_SetTime(&time); +} + /* * Gets the RTC module time values in standard format */ @@ -230,6 +253,24 @@ void XMC_RTC_GetAlarm(XMC_RTC_ALARM_t *const alarm) } +/* + * Sets the RTC module alarm time value in standard format + */ +void XMC_RTC_SetAlarmStdFormat(const struct tm *const stdtime) +{ + XMC_RTC_ALARM_t alarm; + + + alarm.seconds = stdtime->tm_sec; + alarm.minutes = stdtime->tm_min; + alarm.hours = stdtime->tm_hour; + alarm.days = stdtime->tm_mday - 1; + alarm.month = stdtime->tm_mon; + alarm.year = stdtime->tm_year + XMC_RTC_YEAR_OFFSET; + + XMC_RTC_SetAlarm(&alarm); +} + /* * Gets the RTC module alarm time value in standard format */ diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_sdmmc.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_sdmmc.c index 51bb70b4..f5846b46 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_sdmmc.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_sdmmc.c @@ -1,13 +1,13 @@ /** * @file xmc_sdmmc.c - * @date 2015-10-27 + * @date 2016-07-11 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -44,6 +44,12 @@ * 2015-06-20: * - Removed definition of GetDriverVersion API
* + * 2016-03-14: + * - Values are directly assigned to the int status registers
+ * + * 2016-07-11: + * - XMC_SDMMC_SetDataTransferMode() shall not invoke SetDateLineTimeout()
+ * * @endcond */ @@ -257,8 +263,8 @@ void XMC_SDMMC_ClearEvent(XMC_SDMMC_t *const sdmmc, uint32_t event) XMC_ASSERT("XMC_SDMMC_ClearEvent: Invalid module pointer", XMC_SDMMC_CHECK_MODULE_PTR(sdmmc)); XMC_ASSERT("XMC_SDMMC_ClearEvent: Invalid bit-field", !(event & XMC_SDMMC_TARGET_RESP_ERR)); - sdmmc->INT_STATUS_NORM |= (uint16_t)event; - sdmmc->INT_STATUS_ERR |= (uint16_t)(event >> 16U); + sdmmc->INT_STATUS_NORM = (uint16_t)event; + sdmmc->INT_STATUS_ERR = (uint16_t)(event >> 16U); } /* Get the status of an SDMMC event */ @@ -309,9 +315,6 @@ void XMC_SDMMC_SetDataTransferMode(XMC_SDMMC_t *const sdmmc, XMC_SDMMC_TRANSFER_ XMC_ASSERT("XMC_SDMMC_SetDataTransferMode: Invalid module pointer", XMC_SDMMC_CHECK_MODULE_PTR(sdmmc)); XMC_ASSERT("XMC_SDMMC_SetDataTransferMode: Invalid transfer type", XMC_SDMMC_CHECK_TRANSFER_MODE(response->type)); - /* Data line time-out */ - XMC_SDMMC_SetDataLineTimeout(sdmmc, XMC_SDMMC_DAT_TIMEOUT_COUNTER_2_POW_27); - /* Block size */ sdmmc->BLOCK_SIZE = (uint16_t)(response->block_size); @@ -319,7 +322,8 @@ void XMC_SDMMC_SetDataTransferMode(XMC_SDMMC_t *const sdmmc, XMC_SDMMC_TRANSFER_ sdmmc->BLOCK_COUNT = (uint16_t)(response->num_blocks); /* Type of data transfer: single, infinite, multiple or stop multiple */ - sdmmc->TRANSFER_MODE |= (uint16_t)response->type; + sdmmc->TRANSFER_MODE = (uint16_t)((sdmmc->TRANSFER_MODE & (uint16_t)~SDMMC_TRANSFER_MODE_MULTI_BLOCK_SELECT_Msk) | + ((uint16_t)response->type)); /* * Clear block count enable bit; that's only valid for diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_spi.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_spi.c index 553852f1..7ea64cb9 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_spi.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_spi.c @@ -1,12 +1,12 @@ /** * @file xmc_spi.c - * @date 2015-10-27 + * @date 2015-11-04 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -47,7 +47,10 @@ * - Removed GetDriverVersion API
* * 2015-09-01: - * - Modified XMC_UART_CH_EnableEvent() and XMC_UART_CH_DisableEvent() for supporting multiple events configuration
+ * - Modified XMC_SPI_CH_EnableEvent() and XMC_SPI_CH_DisableEvent() for supporting multiple events configuration
+ * + * 2015-11-04: + * - Modified the check of XMC_USIC_CH_GetTransmitBufferStatus() in the XMC_SPI_CH_Transmit() flag
* @endcond * */ @@ -158,7 +161,7 @@ void XMC_SPI_CH_Transmit(XMC_USIC_CH_t *const channel, const uint16_t data, cons /* Check FIFO size */ if ((channel->TBCTR & USIC_CH_TBCTR_SIZE_Msk) == 0U) { - while((uint32_t)XMC_USIC_CH_GetTransmitBufferStatus(channel) & (uint32_t)XMC_USIC_CH_TBUF_STATUS_BUSY) + while((uint32_t)XMC_USIC_CH_GetTransmitBufferStatus(channel) == (uint32_t)XMC_USIC_CH_TBUF_STATUS_BUSY) { } diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_uart.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_uart.c index 95d26ca8..3e9b1422 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_uart.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_uart.c @@ -1,12 +1,12 @@ /** * @file xmc_uart.c - * @date 2015-10-27 + * @date 2016-07-22 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -48,6 +48,11 @@ * * 2015-09-01: * - Modified XMC_UART_CH_EnableEvent() and XMC_UART_CH_DisableEvent() for supporting multiple events configuration
+ * + * 2016-07-22: + * - Modified XMC_UART_CH_Init() to enable transfer status BUSY + * - Modified XMC_UART_CH_Stop() to check for transfer status + * * @endcond * */ @@ -90,10 +95,13 @@ void XMC_UART_CH_Init(XMC_USIC_CH_t *channel, const XMC_UART_CH_CONFIG_t *const * Pulse length is set to 0 to have standard UART signaling, * i.e. the 0 level is signaled during the complete bit time * Sampling point set equal to the half of the oversampling period - * Enable Sample Majority Decision */ + * Enable Sample Majority Decision + * Enable Transfer Status BUSY + */ channel->PCR_ASCMode = (uint32_t)(((config->stop_bits - 1UL) << USIC_CH_PCR_ASCMode_STPB_Pos) | - (((oversampling >> 1UL) + 1UL) << USIC_CH_PCR_ASCMode_SP_Pos) | - USIC_CH_PCR_ASCMode_SMD_Msk); + (((oversampling >> 1UL) + 1UL) << USIC_CH_PCR_ASCMode_SP_Pos) | + USIC_CH_PCR_ASCMode_SMD_Msk | + USIC_CH_PCR_ASCMode_RSTEN_Msk | USIC_CH_PCR_ASCMode_TSTEN_Msk); /* Set passive data level, high Set word length. Data bits - 1 @@ -101,7 +109,7 @@ void XMC_UART_CH_Init(XMC_USIC_CH_t *channel, const XMC_UART_CH_CONFIG_t *const Transmission Mode: The shift control signal is considered active if it is at 1-level. This is the setting to be programmed to allow data transfers */ channel->SCTR = (uint32_t)((((uint32_t)config->data_bits - 1UL) << USIC_CH_SCTR_WLE_Pos) | - ((0x1UL << USIC_CH_SCTR_TRM_Pos) | USIC_CH_SCTR_PDL_Msk)); + ((0x1UL << USIC_CH_SCTR_TRM_Pos) | USIC_CH_SCTR_PDL_Msk)); if (config->frame_length != 0U) { @@ -181,14 +189,16 @@ uint16_t XMC_UART_CH_GetReceivedData(XMC_USIC_CH_t *const channel) XMC_UART_CH_STATUS_t XMC_UART_CH_Stop(XMC_USIC_CH_t *const channel) { XMC_UART_CH_STATUS_t status = XMC_UART_CH_STATUS_OK; - if ((XMC_USIC_CH_GetTransmitBufferStatus(channel) & (uint32_t) XMC_USIC_CH_TBUF_STATUS_BUSY) != 0U) + + if (((XMC_USIC_CH_GetTransmitBufferStatus(channel) & (uint32_t) XMC_USIC_CH_TBUF_STATUS_BUSY) != 0U) || + ((XMC_UART_CH_GetStatusFlag(channel) & XMC_UART_CH_STATUS_FLAG_TRANSFER_STATUS_BUSY) != 0)) { - status = XMC_UART_CH_STATUS_BUSY; + status = XMC_UART_CH_STATUS_BUSY; } else { - /* USIC channel in IDLE mode */ - XMC_USIC_CH_SetMode(channel, XMC_USIC_CH_OPERATING_MODE_IDLE); + /* USIC channel in IDLE mode */ + XMC_USIC_CH_SetMode(channel, XMC_USIC_CH_OPERATING_MODE_IDLE); } return status; } diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_usbd.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_usbd.c index 24f79ec4..f0281582 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_usbd.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_usbd.c @@ -1,12 +1,12 @@ /** * @file xmc_usbd.c - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************** - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_usbh.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_usbh.c new file mode 100644 index 00000000..dc3ad755 --- /dev/null +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_usbh.c @@ -0,0 +1,1487 @@ +/** + * @file xmc_usbh.c + * @date 2016-06-30 + * + * @cond + ********************************************************************************** + * XMClib v2.1.8 - XMC Peripheral Driver Library + * + * Copyright (c) 2015-2016, Infineon Technologies AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * + * Neither the name of the copyright holders 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 HOLDER 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. + * + * (To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with + * Infineon Technologies AG dave@infineon.com). + * + ********************************************************************************************************************* + * + * Change History + * -------------- + * + * 2016-06-30: + * - Initial
+ * 2016-09-01: + * - Removed Keil specific exclusion
+ * + * @endcond + * + */ + +#include +#include + +#include "xmc_usbh.h" + +#if((UC_SERIES == XMC45) || (UC_SERIES == XMC44) || (UC_SERIES == XMC43) || (UC_SERIES == XMC47) || (UC_SERIES == XMC48)) + +/*Function provides transfer result*/ +static uint32_t XMC_USBH_PipeTransferGetResult (XMC_USBH_PIPE_HANDLE pipe_hndl); +/*Updates the power state of the driver*/ +static int32_t XMC_USBH_PowerControl (XMC_USBH_POWER_STATE_t state); + +/*********************************************************** USBH Driver ***************************************************************** */ + +/*Macro to represent USB host driver version*/ +#define XMC_USBH_DRV_VERSION ((uint16_t)((uint16_t)XMC_LIB_MINOR_VERSION << 8U)|XMC_LIB_PATCH_VERSION) +/*Macro used to gate PHY clock and AHB clock*/ +#define XMC_USBH_PHY_CLK_STOP (0x03U) +/*Macro used to ungate PHY clock and AHB clock*/ +#define XMC_USBH_PHY_CLK_UNGATE (0x100U) + +/* Driver Version */ +static const XMC_USBH_DRIVER_VERSION_t xmc_usbh_driver_version = { XMC_USBH_API_VERSION, XMC_USBH_DRV_VERSION }; + +/*Variables to hold selected VBUS port pin*/ +XMC_GPIO_PORT_t * VBUS_port = XMC_GPIO_PORT3; +uint32_t VBUS_pin = 2U; + +/*Array to track nack events on each pipe*/ +bool is_nack[USBH0_MAX_PIPE_NUM]; + +/* Driver Capabilities */ +static const XMC_USBH_CAPABILITIES_t xmc_usbh_driver_capabilities = { + 0x0001U, /* Root HUB available Ports Mask */ + 0U, /* Automatic SPLIT packet handling */ + 1U, /* Signal Connect event */ + 1U, /* Signal Disconnect event */ + 0U /* Signal Overcurrent event */ +}; +/* Driver state and registers */ +static XMC_USBH0_DEVICE_t XMC_USBH0_device/* __attribute__((section ("RW_IRAM1")))*/ = { + (USB0_GLOBAL_TypeDef *)(USB0_BASE), /** Global register interface */ + ((USB0_CH_TypeDef *)(USB0_CH0_BASE)), /** Host channel interface */ + 0, /** Port event callback; set during init */ + 0, /** Pipe event callback; set during init */ + false, /** init status */ + XMC_USBH_POWER_OFF, /** USB Power status */ + false /** Port reset state */ +}; + +/*USB host pipe information. The array stores information related to packet id, data toggle, + * pending data transfer information, periodic transfer interval, received data size etc for each + * pipe.*/ +volatile XMC_USBH0_pipe_t pipe[USBH0_MAX_PIPE_NUM]; + +/* FIFO sizes in bytes (total available memory for FIFOs is 1.25 kB) */ +#define RX_FIFO_SIZE (1128U) /* RxFIFO size */ +#define TX_FIFO_SIZE_NON_PERI (64U) /* Non-periodic Tx FIFO size */ +#define TX_FIFO_SIZE_PERI (1024U) /* Periodic Tx FIFO size */ + +/*Stores data FIFO pointer for each pipe*/ +static uint32_t *XMC_USBH0_dfifo_ptr[USBH0_MAX_PIPE_NUM]; + +/* Local functions */ +/** + * @param enable Enable (XMC_USBH_CLOCK_GATING_ENABLE) or disable(XMC_USBH_CLOCK_GATING_DISABLE) clock gating + * @return None + * \parDescription:
+ * Enable/disable clock gating depending if feature is supported. +*/ +__INLINE static void XMC_lClockGating(uint8_t enable) +{ +#if defined(CLOCK_GATING_SUPPORTED) +if (enable == XMC_USBH_CLOCK_GATING_ENABLE) + XMC_SCU_CLOCK_GatePeripheralClock(XMC_SCU_PERIPHERAL_CLOCK_USB0); + if (enable == XMC_USBH_CLOCK_GATING_DISABLE) + XMC_SCU_CLOCK_UngatePeripheralClock(XMC_SCU_PERIPHERAL_CLOCK_USB0); +#endif + return; +} + +/** + * @param ptr_ch Pointer to Channel + * @return None + * \parDescription:
+ * Triggers halt of a channel. +*/ +__INLINE static void XMC_lTriggerHaltChannel(USB0_CH_TypeDef *ptr_ch) +{ + ptr_ch->HCINTMSK = USB_CH_HCINT_ChHltd_Msk; /* Enable halt interrupt */ + ptr_ch->HCCHAR |= (uint32_t)(USB_CH_HCCHAR_ChEna_Msk | USB_CH_HCCHAR_ChDis_Msk); + return; +} + +/** + * @param ptr_pipe Pointer to Pipe + * @param ptr_ch Pointer to Channel + * @return bool \n + * true = success,\n + * false = fail + * \parDescription:
+ * Start transfer on Pipe. The function uses transfer complete interrupts to transfer data more than maximum + * packet size. It takes care of updating data toggle information in subsequent packets related to the same data transfer. +*/ +static bool XMC_lStartTransfer (XMC_USBH0_pipe_t *ptr_pipe, USB0_CH_TypeDef *ptr_ch) { + uint32_t hcchar; + uint32_t hctsiz; + uint32_t hcintmsk; + uint32_t num_remaining_transfer; + uint32_t num_remaining_fifo; + uint32_t num_remaining_queue; + uint32_t txsts = 0U; + uint32_t pckt_num; + uint32_t max_pckt_size; + uint8_t *ptr_src = ptr_pipe->data; + uint32_t *ptr_dest = NULL; + uint16_t cnt; + uint32_t loc_index; + bool status; + + if (!(XMC_USBH0_device.global_register->HPRT & USB_HPRT_PrtConnSts_Msk)) + { + status = false; + } + else + { + /* Save channel characteristic register to local variable */ + hcchar = ptr_ch->HCCHAR; + /* Save transfer size register to local variable */ + hctsiz = ptr_ch->HCTSIZ_BUFFERMODE; + hcintmsk = 0U; + cnt = 0U; + + /* Prepare transfer */ + /* Reset EPDir (transfer direction = output) and enable channel */ + hcchar &= (uint32_t)(~(uint32_t)(USB_CH_HCCHAR_EPDir_Msk | USB_CH_HCCHAR_ChDis_Msk)); + hcchar |= (uint32_t)USB_CH_HCCHAR_ChEna_Msk; + + /* Enable default interrupts needed for all transfers */ + hcintmsk = (USB_CH_HCINTMSK_XactErrMsk_Msk | + USB_CH_HCINTMSK_XferComplMsk_Msk | + USB_CH_HCINTMSK_NakMsk_Msk | + USB_CH_HCINTMSK_StallMsk_Msk) ; + /* Keep PID */ + hctsiz &= (uint32_t)USB_CH_HCTSIZ_BUFFERMODE_Pid_Msk; + + /* Packet specific setup */ + switch (ptr_pipe->packet & XMC_USBH_PACKET_TOKEN_Msk) { + case XMC_USBH_PACKET_IN: + /* set transfer direction to input */ + hcchar |= (uint32_t)USB_CH_HCCHAR_EPDir_Msk; + /* Enable IN transfer specific interrupts */ + hcintmsk |= (uint32_t)( USB_CH_HCINTMSK_DataTglErrMsk_Msk | + USB_CH_HCINTMSK_BblErrMsk_Msk | + USB_CH_HCINTMSK_AckMsk_Msk | + USB_CH_HCINTMSK_NakMsk_Msk ) ; + break; + case XMC_USBH_PACKET_OUT: + break; + case XMC_USBH_PACKET_SETUP: + hctsiz &= (uint32_t)~USB_CH_HCTSIZ_BUFFERMODE_Pid_Msk ; + hctsiz |= (uint32_t)USB_CH_HCTSIZx_DPID_MDATA; + break; + default: + break; + } + /* Prepare PID */ + switch (ptr_pipe->packet & XMC_USBH_PACKET_DATA_Msk) { + case XMC_USBH_PACKET_DATA0: + hctsiz &= (uint32_t)~USB_CH_HCTSIZ_BUFFERMODE_Pid_Msk; + hctsiz |= (uint32_t)USB_CH_HCTSIZx_DPID_DATA0; + break; + case XMC_USBH_PACKET_DATA1: + hctsiz &= (uint32_t)~USB_CH_HCTSIZ_BUFFERMODE_Pid_Msk; + hctsiz |= (uint32_t)USB_CH_HCTSIZx_DPID_DATA1; + break; + default: + break; + } + + /* Prepare odd/even frame */ + if ((XMC_USBH0_device.global_register->HFNUM & 1U) != 0U) { + hcchar &= (uint32_t)~USB_CH_HCCHAR_OddFrm_Msk; + } else { + hcchar |= (uint32_t)USB_CH_HCCHAR_OddFrm_Msk; + } + + /* Get transfer type specific status */ + switch (ptr_pipe->ep_type) { + case XMC_USBH_ENDPOINT_CONTROL: + case XMC_USBH_ENDPOINT_BULK: + if (!(hcchar & USB_CH_HCCHAR_EPDir_Msk)) { + txsts = XMC_USBH0_device.global_register->GNPTXSTS; + } + break; + case XMC_USBH_ENDPOINT_ISOCHRONOUS: + case XMC_USBH_ENDPOINT_INTERRUPT: + if (!(hcchar & USB_CH_HCCHAR_EPDir_Msk)) { + txsts = XMC_USBH0_device.global_register->HPTXSTS; + } + break; + default: + break; + } + + /* Calculate remaining transfer size */ + num_remaining_transfer = ptr_pipe->num - ptr_pipe->num_transferred_total; + /* Limit transfer to available space inside fifo/queue if OUT transaction */ + if ((uint32_t)(hcchar & USB_CH_HCCHAR_EPDir_Msk) == 0U) { + max_pckt_size = ptr_pipe->ep_max_packet_size; + num_remaining_fifo = (uint32_t)((uint32_t)(txsts & 0x0000FFFFU) << 2); + num_remaining_queue = (uint32_t)((uint32_t)(txsts & 0x00FF0000U) >> 16); + if (num_remaining_transfer > num_remaining_fifo) { + num_remaining_transfer = num_remaining_fifo; + } + pckt_num = (uint32_t)((num_remaining_transfer + (max_pckt_size - 1U)) / max_pckt_size); + if (pckt_num > num_remaining_queue) { + pckt_num = num_remaining_queue; + } + if (num_remaining_transfer > (pckt_num * max_pckt_size)) { + num_remaining_transfer = pckt_num * max_pckt_size; + } + cnt = (uint16_t)((num_remaining_transfer + 3U) / 4U); + ptr_src = ptr_pipe->data + ptr_pipe->num_transferred_total; + loc_index = ((USB0_CH_TypeDef *)ptr_ch - (USB0_CH_TypeDef *)(XMC_USBH0_device.host_channel_registers)); + ptr_dest = (uint32_t *)XMC_USBH0_dfifo_ptr[loc_index]; + /* For OUT/SETUP transfer num_transferring represents num of bytes to be sent */ + ptr_pipe->num_transferring = num_remaining_transfer; + } + else { + /* For IN transfer num_transferring is zero */ + ptr_pipe->num_transferring = 0U; + } + /* Set packet count and transfer size */ + if (num_remaining_transfer != 0U) { + hctsiz |= (((num_remaining_transfer + ptr_pipe->ep_max_packet_size) - 1U) / ptr_pipe->ep_max_packet_size) << 19U; + hctsiz |= num_remaining_transfer; + } else { /* Zero length packet */ + hctsiz |= ((uint32_t)1U << USB_CH_HCTSIZ_BUFFERMODE_PktCnt_Pos); /* Packet count = 1 */ + hctsiz |= 0U; /* Transfer size = 0 */ + } + NVIC_DisableIRQ (USB0_0_IRQn); + ptr_ch->HCINTMSK = hcintmsk; /* Enable channel interrupts */ + ptr_ch->HCTSIZ_BUFFERMODE = hctsiz; /* Write ch transfer size */ + ptr_ch->HCCHAR = hcchar; /* Write ch characteristics */ + while (cnt != 0U) { /* Load data */ +#if defined __TASKING__/*tasking*/ + *ptr_dest = *((__unaligned uint32_t *)ptr_src); +#else/* defined (__GNUC__) || defined (__CC_ARM) || defined (__ICCARM__)*/ + *ptr_dest = *((__packed uint32_t *)ptr_src); +#endif + ptr_src += 4U; + cnt--; + } + NVIC_EnableIRQ (USB0_0_IRQn); /* Enable OTG interrupt */ + status = true; + } + return status; +} + +/* USB driver API functions */ +/** + * @return \ref XMC_USBH_DRIVER_VERSION_t + * \parDescription:
+ * Get driver version. +*/ +static XMC_USBH_DRIVER_VERSION_t XMC_USBH_GetVersion (void) { return xmc_usbh_driver_version; } + +/** + * @return \ref XMC_USBH_CAPABILITIES_t + * \parDescription:
+ * Get driver capabilities. +*/ +static XMC_USBH_CAPABILITIES_t XMC_USBH_GetCapabilities (void) { return xmc_usbh_driver_capabilities; } + +/** + * @param cb_port_event Pointer to port event callback function \ref ARM_USBH_SignalPortEvent + * @param cb_pipe_event Pointer to pipe event callback function \ref ARM_USBH_SignalPipeEvent + * @return int32_t \ref Execution_status. 0 if execution is successful. + * + * \parDescription:
+ * Initialize USB Host Interface. Registers callback functions to be executed on port event and pipe event. + * Initializes FIFO address for each pipe. Configures P3.2 as the VBUS charge pump enable pin.\n + * + * \parRelated APIs:
+ * XMC_USBH_Select_VBUS(), XMC_USBH_Uninitialize() \n +*/ +static int32_t XMC_USBH_Initialize (XMC_USBH_SignalPortEvent_t cb_port_event, + XMC_USBH_SignalPipeEvent_t cb_pipe_event) { + + uint32_t channel; + int32_t status = XMC_USBH_DRIVER_OK; + if (XMC_USBH0_device.init_done == true) + { + /*return ok since initialized*/ + } + else + { + /* assign callbacks */ + XMC_USBH0_device.SignalPortEvent_cb = cb_port_event; + XMC_USBH0_device.SignalPipeEvent_cb = cb_pipe_event; + + /* assign fifo start addresses */ + for (channel = 0U; channel < USBH0_MAX_PIPE_NUM; channel++) { + XMC_USBH0_dfifo_ptr[channel] = (uint32_t *)((uint32_t)USB0_BASE + ((channel + 1U) * 0x01000U)); + } + + XMC_GPIO_SetMode(VBUS_port, (uint8_t)VBUS_pin, XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1); + + XMC_USBH0_device.init_done = true; + } + return status; +} + +/** + * @return int32_t \ref Execution_status. Returns 0 to indicate success. + * \parDescription:
+ * De-initialize USB Host Interface. Sets the driver power state as powered off. Disables VBUS.\n + * + * \parRelated APIs:
+ * XMC_USBH_Select_VBUS(), XMC_USBH_Initialize(), XMC_USBH_PortVbusOnOff() \n +*/ +static int32_t XMC_USBH_Uninitialize (void) { + XMC_USBH0_device.init_done = false; + (void)XMC_USBH_PowerControl(XMC_USBH_POWER_OFF); + return XMC_USBH_DRIVER_OK; +} + +/** + * @param state Power state. \ref XMC_USBH_POWER_STATE_t + * @return int32_t \ref Execution_status. Returns 0 if successful. + * \parDescription:
+ * Control USB Host Interface Power. If power state is set to \ref XMC_USBH_POWER_FULL, + * it initializes the peripheral and enables VBUS. If power state is set to \ref XMC_USBH_POWER_OFF, + * disables the peripheral and the VBUS.\n + * + * \parRelated APIs:
+ * XMC_USBH_Select_VBUS(), XMC_USBH_Initialize(), XMC_USBH_PortVbusOnOff(), XMC_USBH_Uninitialize() \n +*/ +static int32_t XMC_USBH_PowerControl (XMC_USBH_POWER_STATE_t state) { + int32_t status = XMC_USBH_DRIVER_OK; + uint32_t loc_value; + switch (state) { + case XMC_USBH_POWER_LOW: + status = XMC_USBH_DRIVER_ERROR_UNSUPPORTED; + break; + case XMC_USBH_POWER_OFF: + NVIC_DisableIRQ (USB0_0_IRQn); + NVIC_ClearPendingIRQ (USB0_0_IRQn); /* Clear pending interrupt */ + XMC_USBH0_device.power_state = state; /* Clear powered flag */ + XMC_USBH0_device.global_register->GAHBCFG &= (uint32_t)(~USB_GAHBCFG_GlblIntrMsk_Msk); /* Disable USB interrupts */ + XMC_lClockGating((uint8_t)XMC_USBH_CLOCK_GATING_ENABLE); /* Enable Clock Gating */ + XMC_USBH0_device.global_register->PCGCCTL |= (uint32_t)USB_PCGCCTL_StopPclk_Msk; /* Stop PHY clock */ + XMC_SCU_POWER_DisableUsb(); /* Disable Power USB */ + XMC_SCU_RESET_AssertPeripheralReset(XMC_SCU_PERIPHERAL_RESET_USB0); /* reset USB */ + XMC_USBH0_device.port_reset_active = false; /* Reset variables */ + memset((void *)(pipe), 0, (USBH0_MAX_PIPE_NUM * sizeof(XMC_USBH0_pipe_t))); + break; + case XMC_USBH_POWER_FULL: + if (XMC_USBH0_device.init_done == false) + { + status = XMC_USBH_DRIVER_ERROR; + break; + } /* not initialized */ + if (XMC_USBH0_device.power_state == XMC_USBH_POWER_FULL) + { + status = XMC_USBH_DRIVER_OK; + break; + } /* already powered */ + XMC_lClockGating((uint8_t)XMC_USBH_CLOCK_GATING_DISABLE); /* disable clock gating */ + (void)XMC_USBH_osDelay(2U); + XMC_SCU_RESET_DeassertPeripheralReset(XMC_SCU_PERIPHERAL_RESET_USB0); /* deassert reset USB */ + (void)XMC_USBH_osDelay(2U); + (void)XMC_USBH_osDelay(100U); + XMC_SCU_POWER_EnableUsb(); /* Enable Power USB */ + + /* On-chip Full-speed PHY */ + XMC_USBH0_device.global_register->PCGCCTL &= (uint32_t)~USB_PCGCCTL_StopPclk_Msk; /* Start PHY clock */ + XMC_USBH0_device.global_register->GUSBCFG |= (uint32_t)USB_GUSBCFG_PHYSel_Msk; /* Full-speed transceiver */ + + while ((XMC_USBH0_device.global_register->GRSTCTL & USB_GRSTCTL_AHBIdle_Msk) == 0U) /* wait until AHB master state machine is idle */ + { + /*Wait*/ + } + + XMC_USBH0_device.global_register->GRSTCTL |= (uint32_t)USB_GRSTCTL_CSftRst_Msk; /* Core soft reset */ + + while ((XMC_USBH0_device.global_register->GRSTCTL & USB_GRSTCTL_CSftRst_Msk) != 0U) /* wait soft reset confirmation */ + { + /*Wait*/ + } + (void)XMC_USBH_osDelay(100U); + + XMC_USBH0_device.port_reset_active = false; /* Reset variables */ + memset((void *)(pipe), 0, (USBH0_MAX_PIPE_NUM * sizeof(XMC_USBH0_pipe_t))); + + /*Created local copy of GUSBCFG to avoid side effects*/ + loc_value = XMC_USBH0_device.global_register->GUSBCFG; + if (((loc_value & USB_GUSBCFG_ForceHstMode_Msk) == 0U) || \ + ((loc_value & USB_GUSBCFG_ForceDevMode_Msk) != 0U)) + { + XMC_USBH0_device.global_register->GUSBCFG &= (uint32_t)~USB_GUSBCFG_ForceDevMode_Msk; /* Clear force device mode */ + XMC_USBH0_device.global_register->GUSBCFG |= (uint32_t)USB_GUSBCFG_ForceHstMode_Msk; /* Force host mode */ + (void)XMC_USBH_osDelay(100U); + } + + /* FS only, even if HS is supported */ + XMC_USBH0_device.global_register->HCFG |= (uint32_t)(0x200U | USB_CH_HCFG_FSLSSUP(1)); + + /* Rx FIFO setting */ + XMC_USBH0_device.global_register->GRXFSIZ = (RX_FIFO_SIZE/4U); + /* Non-periodic Tx FIFO setting */ + XMC_USBH0_device.global_register->GNPTXFSIZ_HOSTMODE = (((uint32_t)(TX_FIFO_SIZE_NON_PERI/4U) << 16) | (RX_FIFO_SIZE / 4U)); + /* Periodic Tx FIFO setting */ + XMC_USBH0_device.global_register->HPTXFSIZ = ((uint32_t)(TX_FIFO_SIZE_PERI / 4U) << 16U) | ((RX_FIFO_SIZE + TX_FIFO_SIZE_NON_PERI) / 4U); + /* Enable channel interrupts */ + XMC_USBH0_device.global_register->HAINTMSK = ((uint32_t)1U << USBH0_MAX_PIPE_NUM) - 1U; + /* Unmask interrupts */ + XMC_USBH0_device.global_register->GINTMSK_HOSTMODE = ( + USB_GINTSTS_HOSTMODE_DisconnInt_Msk | + USB_GINTMSK_HOSTMODE_HChIntMsk_Msk | + USB_GINTMSK_HOSTMODE_PrtIntMsk_Msk | + USB_GINTMSK_HOSTMODE_RxFLvlMsk_Msk | + USB_GINTMSK_HOSTMODE_SofMsk_Msk | + USB_GINTMSK_HOSTMODE_WkUpIntMsk_Msk + ) ; + /* Set powered state */ + XMC_USBH0_device.power_state = state; + /* Enable interrupts */ + XMC_USBH0_device.global_register->GAHBCFG |= (uint32_t)USB_GAHBCFG_GlblIntrMsk_Msk; + /* Set highest interrupt priority */ + NVIC_SetPriority (USB0_0_IRQn, 0U); + NVIC_EnableIRQ (USB0_0_IRQn); + break; + default: + status = XMC_USBH_DRIVER_ERROR_UNSUPPORTED; + } + return status; +} + +/** + * @param port Root HUB Port Number. Only one port(0) is supported. + * @param vbus VBUS state - \n + * - \b false VBUS off + * - \b true VBUS on + * @return int32_t \ref Execution_status. Returns 0 if successful. + * + * \parDescription:
+ * Set USB port VBUS on/off. +*/ +static int32_t XMC_USBH_PortVbusOnOff (uint8_t port, bool vbus) { + int32_t status = XMC_USBH_DRIVER_OK; + if (XMC_USBH0_device.power_state == XMC_USBH_POWER_OFF) + { + status = XMC_USBH_DRIVER_ERROR; + } + else + { + if (port != 0U) + { + status = XMC_USBH_DRIVER_ERROR_PARAMETER; + } + else + { + if (vbus != 0U) { + /* Port power on */ + XMC_USBH0_device.global_register->HPRT |= (uint32_t)USB_HPRT_PrtPwr_Msk; + XMC_GPIO_SetMode(VBUS_port, (uint8_t)VBUS_pin, XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1); + } else { + /* Port power off */ + XMC_USBH0_device.global_register->HPRT &= (uint32_t)~USB_HPRT_PrtPwr_Msk; + XMC_GPIO_SetMode(VBUS_port, (uint8_t)VBUS_pin, XMC_GPIO_MODE_INPUT_TRISTATE); + } + } + } + return status; +} + +/** + * @param port Root HUB Port Number. Only one port(0) is supported. + * @return int32_t Execution status. \ref Execution_status + * \parDescription:
+ * Do USB port reset. Port reset should honor the requirement of 50ms delay before enabling. + * The function depends on implementation of XMC_USBH_osDelay() for 1ms delay to achieve required delay. + * +*/ +static int32_t XMC_USBH_PortReset (uint8_t port) { + uint32_t hprt; + int32_t status = XMC_USBH_DRIVER_OK; + if (XMC_USBH0_device.power_state == XMC_USBH_POWER_OFF) + { + status = XMC_USBH_DRIVER_ERROR; + } + else + { + if (port != 0U) + { + status = XMC_USBH_DRIVER_ERROR_PARAMETER; + } + + XMC_USBH0_device.port_reset_active = true; + hprt = XMC_USBH0_device.global_register->HPRT; + hprt &= (uint32_t)~USB_HPRT_PrtEna_Msk; /* Disable port */ + hprt |= (uint32_t)USB_HPRT_PrtRst_Msk; /* Port reset */ + XMC_USBH0_device.global_register->HPRT = hprt; + (void)XMC_USBH_osDelay(50U); /* wait at least 50ms */ + hprt &= (uint32_t)~USB_HPRT_PrtRst_Msk; /* Clear port reset */ + XMC_USBH0_device.global_register->HPRT = hprt; + (void)XMC_USBH_osDelay(50U); /* wait for ISR */ + + /*Wait for the port to be enabled*/ + while ((XMC_USBH0_device.global_register->HPRT & USB_HPRT_PrtEna_Msk) == 0U) + { + /*wait*/ + } + + if (XMC_USBH0_device.port_reset_active == true) + { + XMC_USBH0_device.port_reset_active = false; + status = XMC_USBH_DRIVER_ERROR; /* reset not confirmed inside ISR */ + } + } + + return status; +} + +/** + * @param port USB port number. Only one port(0) is supported. + * @return \ref Execution_status + * \parDescription:
+ * Suspend USB Port (stop generating SOFs).\n + * + * \parRelated APIs:
+ * XMC_USBH_PortResume() \n +*/ +static int32_t XMC_USBH_PortSuspend (uint8_t port) +{ + int32_t status = XMC_USBH_DRIVER_OK; + uint32_t hprt; + if (XMC_USBH0_device.power_state == XMC_USBH_POWER_OFF) + { + status = XMC_USBH_DRIVER_ERROR; + } + else + { + if (port != 0U) + { + status = XMC_USBH_DRIVER_ERROR_PARAMETER; + } + else + { + hprt = XMC_USBH0_device.global_register->HPRT; + hprt &= (uint32_t)~(USB_HPRT_PrtEna_Msk); + hprt |= (uint32_t)USB_HPRT_PrtSusp_Msk; + XMC_USBH0_device.global_register->HPRT = hprt; + /* Stop PHY clock after suspending the bus*/ + XMC_USBH0_device.global_register->PCGCCTL |= XMC_USBH_PHY_CLK_STOP; + + } + } + return status; +} + +/** + * @param port USB port number. Only one port(0) is supported. + * @return \ref Execution_status + * \parDescription:
+ * Resume suspended USB port (start generating SOFs).\n + * + * \parRelated APIs:
+ * XMC_USBH_PortSuspend() \n +*/ +static int32_t XMC_USBH_PortResume (uint8_t port) +{ + int32_t status = XMC_USBH_DRIVER_OK; + uint32_t hprt; + if (XMC_USBH0_device.power_state == XMC_USBH_POWER_OFF) + { + status = XMC_USBH_DRIVER_ERROR; + } + else + { + if (port != 0U) + { + status = XMC_USBH_DRIVER_ERROR_PARAMETER; + } + else + { + /*Ungate PHY clock*/ + XMC_USBH0_device.global_register->PCGCCTL = XMC_USBH_PHY_CLK_UNGATE; + /*Set resume bit*/ + hprt = XMC_USBH0_device.global_register->HPRT; + hprt &= (uint32_t)~(USB_HPRT_PrtEna_Msk); + hprt |= (uint32_t)USB_HPRT_PrtRes_Msk; + XMC_USBH0_device.global_register->HPRT = hprt; + + (void)XMC_USBH_osDelay(20U); + + hprt = XMC_USBH0_device.global_register->HPRT; + hprt &= (uint32_t)~(USB_HPRT_PrtEna_Msk); + hprt &= (uint32_t)~((uint32_t)USB_HPRT_PrtRes_Msk); + XMC_USBH0_device.global_register->HPRT = hprt; + } + } + + return status; +} + +/** + * @param port USB port number. Only one port(0) is supported. + * @return XMC_USBH_PORT_STATE_t Port State + * + * \parDescription:
+ * Get current USB port state. The state indicates if the port is connected, port speed + * and port overcurrent status. +*/ +static XMC_USBH_PORT_STATE_t XMC_USBH_PortGetState (uint8_t port) +{ + XMC_USBH_PORT_STATE_t port_state = { 0U, 0U, 0U }; + uint32_t hprt; + + if (XMC_USBH0_device.power_state == XMC_USBH_POWER_OFF) + { + /*Do not update the port state*/ + } + else + { + if (port != 0U) + { + /*Do not update the port state*/ + } + else + { + hprt = XMC_USBH0_device.global_register->HPRT; + if(((hprt & USB_HPRT_PrtConnSts_Msk) != 0U)) + { + port_state.connected = 1U; + } + else + { + port_state.connected = 0U; + } + port_state.overcurrent = 0U; + + switch ((uint32_t)((uint32_t)(hprt & USB_HPRT_PrtSpd_Msk) >> USB_HPRT_PrtSpd_Pos)) { + case 1U: /* Full speed */ + port_state.speed = XMC_USBH_SPEED_FULL; + break; + default: + break; + } + } + } + return port_state; +} + +/** + * @param dev_addr Device address + * @param dev_speed Device speed + * @param hub_addr Hub address. This value should be 0 since hub is not supported. + * @param hub_port USB port number. Only one port(0) is supported. + * @param ep_addr Device endpoint address \n + * - ep_addr.0..3: Address \n + * - ep_addr.7: Direction\n + * @param ep_type Endpoint type (ARM_USB_ENDPOINT_xxx) + * @param ep_max_packet_size Endpoint maximum packet size + * @param ep_interval Endpoint polling interval + * @return XMC_USBH_PIPE_HANDLE Pipe handle is a pointer to pipe hardware base address. + * + * \parDescription:
+ * Create/allocate a pipe configured with input parameters. The function looks for an unused pipe and configures with input parameters. + * + * \parRelated APIs:
+ * XMC_USBH_PipeModify(), XMC_USBH_PipeDelete(), XMC_USBH_PipeReset(), XMC_USBH_PipeTransfer() \n +*/ +static XMC_USBH_PIPE_HANDLE XMC_USBH_PipeCreate (uint8_t dev_addr, uint8_t dev_speed, uint8_t hub_addr, uint8_t hub_port, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_max_packet_size, uint8_t ep_interval) { + XMC_USBH0_pipe_t *ptr_pipe; + USB0_CH_TypeDef *ptr_ch; + uint32_t i; + uint32_t loc_val; + + if (XMC_USBH0_device.power_state == XMC_USBH_POWER_OFF) + { + ptr_ch = (USB0_CH_TypeDef *)NULL; + } + else + { + /* get first free pipe available */ + ptr_ch = (USB0_CH_TypeDef *)(XMC_USBH0_device.host_channel_registers); + + for (i = 0U; i < USBH0_MAX_PIPE_NUM; i++) { + if ((ptr_ch->HCCHAR & 0x3FFFFFFFU) == 0U) + { + break; + } + ptr_ch++; + } + + /* free pipe found? */ + if (i == USBH0_MAX_PIPE_NUM) + { + ptr_ch = (USB0_CH_TypeDef *)NULL; + } + else + { + ptr_pipe = (XMC_USBH0_pipe_t *)(&pipe[(ptr_ch - (USB0_CH_TypeDef *)(XMC_USBH0_device.host_channel_registers))]); + + memset((void *)ptr_pipe, 0, sizeof(XMC_USBH0_pipe_t)); /* Initialize pipe structure */ + + /* Fill in all fields of Endpoint Descriptor */ + /*Get the end point direction from the MSB of address*/ + loc_val = 0U; + if (((ep_addr >> 7U) & 0x1U) == 0U) + { + loc_val = 1U; + } + ptr_ch->HCCHAR = ((uint32_t)(USB_CH_HCCHARx_MPS(ep_max_packet_size))| + USB_CH_HCCHARx_EPNUM(ep_addr)) | + (uint32_t)(USB_CH_HCCHAR_EPDir_Msk * loc_val) | + (USB_CH_HCCHARx_EPTYPE (ep_type) ) | + (USB_CH_HCCHARx_DEVADDR (dev_addr) ) ; + /* Store Pipe settings */ + ptr_pipe->ep_max_packet_size = ep_max_packet_size; + ptr_pipe->ep_type = ep_type; + switch (ep_type) { + case XMC_USBH_ENDPOINT_CONTROL: + case XMC_USBH_ENDPOINT_BULK: + break; + case XMC_USBH_ENDPOINT_ISOCHRONOUS: + case XMC_USBH_ENDPOINT_INTERRUPT: + if (ep_interval > 0U) { + ptr_pipe->interval_reload = ep_interval; + } + ptr_pipe->interval = ptr_pipe->interval_reload; + loc_val = ((((uint32_t)ep_max_packet_size >> 11U) + 1U) & 3U); + ptr_ch->HCCHAR |= (uint32_t)USB_CH_HCCHARx_MCEC(loc_val); + break; + default: + break; + } + } + } + return ((XMC_USBH_EP_HANDLE)ptr_ch); +} + +/** + * @param pipe_hndl Pointer returned by the pipe create function. It is the hardware based address of a USB channel. + * @param dev_addr Device address to be configured for the pipe. + * @param dev_speed Device speed class. + * @param hub_addr Hub address. It should be 0 since hub is not supported. + * @param hub_port USB port number. Only one port(0) is supported. + * @param ep_max_packet_size Endpoint maximum packet size + * @return Execution_status + * + * \parDescription:
+ * Modify an existing pipe with input parameters. It can be used to configure the pipe after receiving configuration details from the device. + * + * \parRelated APIs:
+ * XMC_USBH_PipeCreate(), XMC_USBH_PipeDelete(), XMC_USBH_PipeReset(), XMC_USBH_PipeTransfer() \n +*/ +static int32_t XMC_USBH_PipeModify (XMC_USBH_PIPE_HANDLE pipe_hndl, uint8_t dev_addr, uint8_t dev_speed, uint8_t hub_addr, uint8_t hub_port, uint16_t ep_max_packet_size) { + XMC_USBH0_pipe_t *ptr_pipe; + USB0_CH_TypeDef *ptr_ch; + uint32_t hcchar; + int32_t status = XMC_USBH_DRIVER_OK; + + if (XMC_USBH0_device.power_state == XMC_USBH_POWER_OFF) + { + status = XMC_USBH_DRIVER_ERROR; + } + else + { + if (pipe_hndl == 0U) + { + status = XMC_USBH_DRIVER_ERROR_PARAMETER; + } + else + { + ptr_ch = (USB0_CH_TypeDef *)(pipe_hndl); + ptr_pipe = (XMC_USBH0_pipe_t *)(&pipe[(ptr_ch - (USB0_CH_TypeDef *)(XMC_USBH0_device.host_channel_registers))]); + if (ptr_pipe->in_use != 0U) + { + status = XMC_USBH_DRIVER_ERROR_BUSY; + } + else + { + /* Fill in all fields of channel */ + hcchar = ptr_ch->HCCHAR; + /* Clear fields */ + hcchar &= (uint32_t)~(USB_CH_HCCHAR_MPS_Msk | USB_CH_HCCHAR_DevAddr_Msk) ; + /* Set fields */ + hcchar |= (uint32_t)(USB_CH_HCCHARx_MPS(ep_max_packet_size) | (USB_CH_HCCHARx_DEVADDR(dev_addr))); + ptr_ch->HCCHAR = hcchar; + + ptr_pipe->ep_max_packet_size = ep_max_packet_size; + } + } + } + + return status; +} + +/** + * @param pipe_hndl Pointer returned by the pipe create function. It is the hardware based address of a USB channel. + * @return Execution_status + * + * \parDescription:
+ * Delete pipe from active pipes list. After it is deleted, it can be assigned to new pipe request. + * + * \parRelated APIs:
+ * XMC_USBH_PipeCreate(), XMC_USBH_PipeModify(), XMC_USBH_PipeReset(), XMC_USBH_PipeTransfer() \n +*/ +static int32_t XMC_USBH_PipeDelete (XMC_USBH_PIPE_HANDLE pipe_hndl) { + XMC_USBH0_pipe_t *ptr_pipe; + USB0_CH_TypeDef *ptr_ch; + int32_t status = XMC_USBH_DRIVER_OK; + + if (XMC_USBH0_device.power_state == XMC_USBH_POWER_OFF) + { + status = XMC_USBH_DRIVER_ERROR; + } + else + { + if (pipe_hndl == 0U) + { + status = XMC_USBH_DRIVER_ERROR_PARAMETER; + } + else + { + ptr_ch = (USB0_CH_TypeDef *)(pipe_hndl); + ptr_pipe = (XMC_USBH0_pipe_t *)(&pipe[(ptr_ch - (USB0_CH_TypeDef *)(XMC_USBH0_device.host_channel_registers))]); + if (ptr_pipe->in_use != 0U) + { + status = XMC_USBH_DRIVER_ERROR_BUSY; + } + else + { + ptr_ch->HCCHAR = 0U; + ptr_ch->HCINT = 0U; + ptr_ch->HCINTMSK = 0U; + ptr_ch->HCTSIZ_BUFFERMODE = 0U; + + memset((void *)ptr_pipe, 0, sizeof(XMC_USBH0_pipe_t)); + } + } + } + + return status; +} + +/** + * @param pipe_hndl Pointer returned by the pipe create function. It is the hardware based address of a USB channel. + * @return Execution_status + * \parDescription:
+ * Reset pipe by clearing the interrupt mask and resetting the transfer control register.\n + * + * \parRelated APIs:
+ * XMC_USBH_PipeCreate(), XMC_USBH_PipeModify(), XMC_USBH_PipeDelete(), XMC_USBH_PipeTransfer() \n +*/ +static int32_t XMC_USBH_PipeReset (XMC_USBH_PIPE_HANDLE pipe_hndl) { + XMC_USBH0_pipe_t *ptr_pipe; + USB0_CH_TypeDef *ptr_ch; + int32_t status = XMC_USBH_DRIVER_OK; + + if (XMC_USBH0_device.power_state == XMC_USBH_POWER_OFF) + { + status = XMC_USBH_DRIVER_ERROR; + } + else + { + if (pipe_hndl == 0U) + { + status = XMC_USBH_DRIVER_ERROR_PARAMETER; + } + else + { + ptr_ch = (USB0_CH_TypeDef *)(pipe_hndl); + ptr_pipe = (XMC_USBH0_pipe_t *)(&pipe[(ptr_ch - (USB0_CH_TypeDef *)(XMC_USBH0_device.host_channel_registers))]); + if (ptr_pipe->in_use != 0U) + { + status = XMC_USBH_DRIVER_ERROR_BUSY; + } + else + { + ptr_ch->HCINT = 0U; + ptr_ch->HCINTMSK = 0U; + ptr_ch->HCTSIZ_BUFFERMODE = 0U; + } + } + } + return status; +} + +/** + * @param pipe_hndl Pointer returned by the pipe create function. It is the hardware based address of a USB channel. + * @param packet Packet information with bit masks to represent packet data toggle information and packet type.\n + * \ref XMC_USBH_PACKET_DATA0 / \ref XMC_USBH_PACKET_DATA1, \ref XMC_USBH_PACKET_SETUP / + * \ref XMC_USBH_PACKET_OUT / \ref XMC_USBH_PACKET_IN + * @param data Pointer to buffer with data to send or for received data to be stored. + * @param num Number of data bytes to transfer + * @return Execution_status + * + * \parDescription:
+ * Transfer packets through USB Pipe. Handles transfer of multiple packets using the pipe transfer complete event. + * The pipe event callback function will be called when the transfer is completed.\n + * + * \parRelated APIs:
+ * XMC_USBH_PipeCreate(), XMC_USBH_PipeModify(), XMC_USBH_PipeDelete(), XMC_USBH_PipeReset() \n +*/ +static int32_t XMC_USBH_PipeTransfer (XMC_USBH_PIPE_HANDLE pipe_hndl, uint32_t packet, uint8_t *data, uint32_t num) { + XMC_USBH0_pipe_t *ptr_pipe; + int32_t status = XMC_USBH_DRIVER_OK; + + if (XMC_USBH0_device.power_state == XMC_USBH_POWER_OFF) + { + status = XMC_USBH_DRIVER_ERROR; + } + else + { + + if(!(((((packet & XMC_USBH_PACKET_TOKEN_Msk) == XMC_USBH_PACKET_OUT) || + ((packet & XMC_USBH_PACKET_TOKEN_Msk) == XMC_USBH_PACKET_IN))) || + ((packet & XMC_USBH_PACKET_TOKEN_Msk) == XMC_USBH_PACKET_SETUP ))) + { + status = XMC_USBH_DRIVER_ERROR_PARAMETER; + } + else + { + if (pipe_hndl == 0U) + { + status = XMC_USBH_DRIVER_ERROR_PARAMETER; + } + else + { + if ((XMC_USBH0_device.global_register->HPRT & USB_HPRT_PrtConnSts_Msk) == 0U) + { + status = XMC_USBH_DRIVER_ERROR; + } + else + { + ptr_pipe = (XMC_USBH0_pipe_t *)(&pipe[((USB0_CH_TypeDef *)pipe_hndl - (USB0_CH_TypeDef *)(XMC_USBH0_device.host_channel_registers))]); + if (ptr_pipe->in_use != 0U) + { + status = XMC_USBH_DRIVER_ERROR_BUSY; + } + else + { + /* Prepare transfer information */ + ptr_pipe->packet = packet; + ptr_pipe->data = data; + ptr_pipe->num = num; + ptr_pipe->num_transferred_total = 0U; + ptr_pipe->num_transferring = 0U; + ptr_pipe->in_use = 0U; + ptr_pipe->transfer_active = 0U; + ptr_pipe->interrupt_triggered = 0U; + ptr_pipe->event = 0U; + + if ((ptr_pipe->ep_type == (uint8_t)XMC_USBH_ENDPOINT_INTERRUPT) && (ptr_pipe->interval != 0U)) { + ptr_pipe->in_use = 1U; /* transfer will be started inside interrupt (SOF) */ + } else { + ptr_pipe->transfer_active = 1U; + ptr_pipe->in_use = 1U; + if(XMC_lStartTransfer (ptr_pipe, (USB0_CH_TypeDef *)pipe_hndl) == false) + { + status = XMC_USBH_DRIVER_ERROR; + } + } + } + } + } + } + } + return status; +} + +/** + * @param pipe_hndl Pointer returned by the pipe create function. It is the hardware based address of a USB channel. + * @return uint32_t Number of successfully transferred data bytes + * + * \parDescription:
+ * Get result of USB Pipe transfer. + * + * \parRelated APIs:
+ * XMC_USBH_PipeCreate(), XMC_USBH_PipeModify(), XMC_USBH_PipeDelete(), XMC_USBH_PipeTransfer() \n +*/ +static uint32_t XMC_USBH_PipeTransferGetResult (XMC_USBH_PIPE_HANDLE pipe_hndl) { + uint32_t status; + if (pipe_hndl == 0U) + { + status = 0U; + } + else + { + status = (pipe[((USB0_CH_TypeDef *)pipe_hndl - (USB0_CH_TypeDef *)(XMC_USBH0_device.host_channel_registers))].num_transferred_total); + } + return status; +} + +/** + * @param pipe_hndl Pointer returned by the pipe create function. It is the hardware based address of a USB channel. + * @return Execution_status + * + * \parDescription:
+ * Abort current USB Pipe transfer.\n + * + * \parRelated APIs:
+ * XMC_USBH_PipeCreate(), XMC_USBH_PipeModify(), XMC_USBH_PipeDelete(), XMC_USBH_PipeTransfer() \n +*/ +static int32_t XMC_USBH_PipeTransferAbort (XMC_USBH_PIPE_HANDLE pipe_hndl) { + XMC_USBH0_pipe_t *ptr_pipe; + USB0_CH_TypeDef *ptr_ch; + uint32_t timeout; + int32_t status = XMC_USBH_DRIVER_ERROR; + + ptr_ch = (USB0_CH_TypeDef *) pipe_hndl; + + if (XMC_USBH0_device.power_state == XMC_USBH_POWER_OFF) + { + /*Error in power state*/ + } + else + { + if (pipe_hndl == 0U) + { + status = XMC_USBH_DRIVER_ERROR_PARAMETER; + } + else + { + ptr_pipe = (XMC_USBH0_pipe_t *)(&pipe[(ptr_ch - (USB0_CH_TypeDef *)(XMC_USBH0_device.host_channel_registers))]); + + if (ptr_pipe->in_use != 0U) { + ptr_pipe->in_use = 0U; + /* Disable channel if not yet halted */ + if ((ptr_ch->HCINT & USB_CH_HCINT_ChHltd_Msk) == 0U) + { + if (ptr_ch->HCCHAR & USB_CH_HCCHAR_ChEna_Msk) + { + ptr_ch->HCINTMSK = 0U; + (void)XMC_USBH_osDelay(1U); + if (ptr_ch->HCINT & USB_CH_HCINT_NAK_Msk) { + ptr_ch->HCINT = USB_CH_HCINTx_ALL; /* Clear all interrupts */ + status = XMC_USBH_DRIVER_OK; + } + else + { + ptr_ch->HCINT = USB_CH_HCINTx_ALL; /* Clear all interrupts */ + ptr_ch->HCCHAR = (uint32_t)(ptr_ch->HCCHAR | USB_CH_HCCHAR_ChEna_Msk | USB_CH_HCCHAR_ChDis_Msk); + + /* wait until channel is halted */ + for (timeout = 0U; timeout < 5000U; timeout++) { + if (ptr_ch->HCINT & USB_CH_HCINT_ChHltd_Msk) { + ptr_ch->HCINT = USB_CH_HCINTx_ALL; + status = XMC_USBH_DRIVER_OK; + } + } + } + } + } + } + } + } + + return status; +} + +/** + * @return Frame number. + * + * \parDescription:
+ * Get current USB Frame Number. +*/ +static uint16_t XMC_USBH_GetFrameNumber (void) +{ + uint16_t status; + + if (XMC_USBH0_device.power_state == XMC_USBH_POWER_OFF) + { + status = 0U; + } + else + { + status = (uint16_t)((XMC_USBH0_device.global_register->HFNUM) & 0xFFFU); + } + return status; +} + +/** + * @param gintsts USB port interrupt status flag. + * + * \parDescription:
+ * USB host interrupt handler. It updates port and pipe state information based on different events + * generated by the peripheral. It propagates the port events to the callback function registered by the user + * during initialization. When a pipe transfer complete event is detected, it checks if any further data is available + * to be transmitted on the same pipe and continues transmission until data is available. A pipe event is also propagated + * to the user provided pipe event callback function. A transfer complete event will be propagated only when all the data + * is transmitted for an OUT transaction. + * +*/ +void XMC_USBH_HandleIrq (uint32_t gintsts) { + XMC_USBH0_pipe_t *ptr_pipe; + USB0_CH_TypeDef *ptr_ch; + uint32_t hprt, haint, hcint, pktcnt, mpsiz; + uint32_t ch; + uint8_t *ptr_data; + uint32_t *dfifo; + uint32_t grxsts, bcnt, dat, len, len_rest; + + /* Host port interrupt */ + if ((gintsts & USB_GINTSTS_HOSTMODE_PrtInt_Msk) != 0U) { + hprt = XMC_USBH0_device.global_register->HPRT; + /* Clear port enable */ + XMC_USBH0_device.global_register->HPRT = hprt & (uint32_t)(~USB_HPRT_PrtEna_Msk); + if ((hprt & USB_HPRT_PrtConnDet_Msk) != 0U) { + XMC_USBH0_device.global_register->HCFG = (0x200U | (USB_CH_HCFG_FSLSPCS(1) | + USB_CH_HCFG_FSLSSUP(1))); + /* Ignore connect under reset */ + if (XMC_USBH0_device.port_reset_active == false) { + XMC_USBH0_device.SignalPortEvent_cb(0U, XMC_USBH_EVENT_CONNECT); + } + } + if ((hprt & USB_HPRT_PrtEnChng_Msk) != 0U) { /* If port enable changed */ + if ((hprt & USB_HPRT_PrtEna_Msk) != 0U) { /* If device connected */ + if (XMC_USBH0_device.port_reset_active == true) { + XMC_USBH0_device.port_reset_active = false; + XMC_USBH0_device.SignalPortEvent_cb(0U, XMC_USBH_EVENT_RESET); + } + } + } + } + + /* Disconnect interrupt */ + if ((gintsts & USB_GINTSTS_HOSTMODE_DisconnInt_Msk) != 0U) { + XMC_USBH0_device.global_register->GINTSTS_HOSTMODE = USB_GINTSTS_HOSTMODE_DisconnInt_Msk; /* Clear disconnect interrupt */ + /* Ignore disconnect under reset */ + if ( XMC_USBH0_device.port_reset_active == false) { + ptr_ch = (USB0_CH_TypeDef *)(XMC_USBH0_device.host_channel_registers); + ptr_pipe = (XMC_USBH0_pipe_t *)(pipe); + for (ch = 0U; ch < USBH0_MAX_PIPE_NUM; ch++) { + if (ptr_pipe->in_use != 0U) { + ptr_pipe->in_use = 0U; + ptr_ch->HCINT = USB_CH_HCINTx_ALL; /* Clear all interrupts */ + ptr_ch->HCINTMSK = USB_CH_HCINT_ChHltd_Msk; /* Enable halt interrupt */ + ptr_ch->HCCHAR |= (uint32_t)(USB_CH_HCCHAR_ChEna_Msk | USB_CH_HCCHAR_ChDis_Msk); /* Activate Halt */ + XMC_USBH0_device.SignalPipeEvent_cb((XMC_USBH_EP_HANDLE)ptr_ch, XMC_USBH_EVENT_BUS_ERROR); + } + ptr_ch++; + ptr_pipe++; + } + XMC_USBH0_device.SignalPortEvent_cb(0U, XMC_USBH_EVENT_DISCONNECT); + } + } + /* Handle receive fifo not-empty interrupt */ + if ((gintsts & USB_GINTSTS_HOSTMODE_RxFLvl_Msk) != 0U) { + XMC_USBH0_device.global_register->GINTMSK_HOSTMODE &= (uint32_t)~USB_GINTMSK_HOSTMODE_RxFLvlMsk_Msk; + grxsts = (XMC_USBH0_device.global_register->GRXSTSP_HOSTMODE); + /* IN Data Packet received ? */ + if ((uint32_t)((grxsts >> 17U) & 0x0FU) == (uint32_t)USB_GRXSTSR_HOSTMODE_PktSts_IN_DATA_PKT) { + ch = (uint32_t)(grxsts & USB_GRXSTSR_DEVICEMODE_EPNum_Msk); + bcnt = ((uint32_t)(grxsts & USB_GRXSTSR_DEVICEMODE_BCnt_Msk) >> USB_GRXSTSR_DEVICEMODE_BCnt_Pos); + dfifo = (uint32_t *)XMC_USBH0_dfifo_ptr[ch]; + ptr_data = pipe[ch].data + pipe[ch].num_transferred_total; + len = bcnt / 4U; /* Received number of 32-bit data */ + len_rest = bcnt & 3U; /* Number of bytes left */ + /* Read data from fifo */ + /* Read 32 bit sized data */ + while (len != 0U) { +#if defined __TASKING__/*tasking*/ + *((__unaligned uint32_t *)ptr_data) = *dfifo; +#else /* defined (__GNUC__) || defined (__CC_ARM) || defined (__ICCARM__)*/ + *((__packed uint32_t *)ptr_data) = *dfifo; +#endif + + ptr_data += 4U; + len--; + } + /* Read 8 bit sized data */ + if (len_rest != 0U) { +#if defined __TASKING__/*tasking*/ + dat = *((__unaligned uint32_t *)dfifo); +#else /* defined (__GNUC__) || defined (__CC_ARM) || defined (__ICCARM__)*/ + dat = *((__packed uint32_t *)dfifo); +#endif + while (len_rest != 0U) { + *ptr_data = (uint8_t)dat; + ptr_data++; + dat >>= 8; + len_rest--; + } + } + pipe[ch].num_transferring += bcnt; + pipe[ch].num_transferred_total += bcnt; + } + XMC_USBH0_device.global_register->GINTMSK_HOSTMODE |= (uint32_t)USB_GINTMSK_HOSTMODE_RxFLvlMsk_Msk; + } + + /* Handle sof interrupt */ + if ((gintsts & USB_GINTSTS_HOSTMODE_Sof_Msk) != 0U) { /* If start of frame interrupt */ + XMC_USBH0_device.global_register->GINTSTS_HOSTMODE = USB_GINTSTS_HOSTMODE_Sof_Msk; /* Clear SOF interrupt */ + ptr_pipe = (XMC_USBH0_pipe_t *)(pipe); + for (ch = 0U; ch < USBH0_MAX_PIPE_NUM; ch++) { + /* If interrupt transfer is active handle period (interval) */ + if ((ptr_pipe->ep_type == (uint8_t)XMC_USBH_ENDPOINT_INTERRUPT) && (ptr_pipe->in_use == 1U)) { + if (ptr_pipe->interval != 0U) + { + ptr_pipe->interval--; + if (ptr_pipe->interval == 0U) + { + ptr_pipe->interval = ptr_pipe->interval_reload; + ptr_pipe->interrupt_triggered = 1U; + } + } + } + ptr_pipe++; + } + } + + /* Handle host ctrl interrupt */ + if ((gintsts & USB_GINTSTS_HOSTMODE_HChInt_Msk) != 0U) { + haint = XMC_USBH0_device.global_register->HAINT; + for (ch = 0U; ch < USBH0_MAX_PIPE_NUM; ch++) { + /* Check for interrupt of all channels */ + if ((haint & (uint32_t)((uint32_t)1U << ch)) != 0U) { + haint &= (uint32_t)~((uint32_t)1U << ch); + ptr_ch = (USB0_CH_TypeDef *)(XMC_USBH0_device.host_channel_registers) + ch; + ptr_pipe = (XMC_USBH0_pipe_t *)(&pipe[ch]); + /*Local variable for HCINT*/ + dat = ptr_ch->HCINT; + hcint = (uint32_t)(dat & ptr_ch->HCINTMSK); + if ((hcint & USB_CH_HCINT_ChHltd_Msk) != 0U) { /* channel halted ? */ + ptr_ch->HCINTMSK = 0U; /* disable all channel interrupts */ + ptr_ch->HCINT = USB_CH_HCINTx_ALL; /* clear all interrupts */ + ptr_pipe->transfer_active = 0U; /* set status transfer not active */ + hcint = 0U; + } + if ((hcint & USB_CH_HCINT_XferCompl_Msk) != 0U) { /* data transfer finished ? */ + ptr_ch->HCINT = USB_CH_HCINTx_ALL; /* clear all interrupts */ + if ((ptr_ch->HCCHAR & USB_CH_HCCHAR_EPDir_Msk) == 0U) { /* endpoint OUT ? */ + ptr_ch->HCINTMSK = 0U; /* disable all channel interrupts */ + ptr_pipe->transfer_active = 0U; /* transfer not in progress */ + ptr_pipe->num_transferred_total += ptr_pipe->num_transferring; /* admin OUT transfer status */ + ptr_pipe->num_transferring = 0U; /* admin OUT transfer status */ + if (ptr_pipe->num_transferred_total == ptr_pipe->num) { /* all bytes transferred ? */ + ptr_pipe->in_use = 0U; /* release pipe */ + ptr_pipe->event = (uint8_t)XMC_USBH_EVENT_TRANSFER_COMPLETE; /* prepare event notification */ + } + hcint = 0U; + } + if ((ptr_ch->HCCHAR & USB_CH_HCCHAR_EPDir_Msk) != 0U) { /* endpoint IN ? */ + ptr_pipe->in_use = 0U; /* release pipe */ + ptr_pipe->event = (uint8_t)XMC_USBH_EVENT_TRANSFER_COMPLETE; /* prepare event notification */ + XMC_lTriggerHaltChannel(ptr_ch); /* trigger channel halt */ + } + } + if ((hcint & USB_CH_HCINTMSK_AckMsk_Msk) != 0U) { /* ACK received ? */ + ptr_ch->HCINT = USB_CH_HCINTMSK_AckMsk_Msk; /* clear ACK interrupt */ + is_nack[ch] = false; + if ((ptr_ch->HCCHAR & USB_CH_HCCHAR_EPDir_Msk) != 0U) { /* endpoint IN ? */ + if ((ptr_pipe->num != ptr_pipe->num_transferred_total) && /* if all data was not transferred */ + (ptr_pipe->num_transferring != 0U) && /* if zero-length packet was not received */ + ((ptr_pipe->num_transferred_total%ptr_pipe->ep_max_packet_size) == 0U)){ /* if short packet was not received */ + ptr_ch->HCCHAR |= (uint32_t)USB_CH_HCCHAR_ChEna_Msk; /* trigger next transfer */ + } + } else { /* endpoint OUT */ + XMC_lTriggerHaltChannel(ptr_ch); /* trigger channel halt */ + } + hcint = 0U; + } + /*local variable for HCCHAR*/ + dat = ptr_ch->HCCHAR; + if (((hcint & (USB_CH_HCINTMSK_StallMsk_Msk | /* STALL */ + USB_CH_HCINTMSK_NakMsk_Msk | /* or NAK */ + USB_CH_HCINTx_ERRORS )) != 0U) && /* or transaction error */ + ((dat & USB_CH_HCCHAR_EPDir_Msk) == 0U)) + { /* and endpoint OUT */ + + pktcnt = (uint32_t)((ptr_ch->HCTSIZ_BUFFERMODE & USB_CH_HCTSIZ_BUFFERMODE_PktCnt_Msk) /* administrate OUT transfer status */ + >> USB_CH_HCTSIZ_BUFFERMODE_PktCnt_Pos); + mpsiz = (ptr_ch->HCCHAR ) & 0x000007FFU; + if ((ptr_pipe->num_transferring >= mpsiz) && (pktcnt > 0U)) { + ptr_pipe->num_transferred_total += (uint32_t)(ptr_pipe->num_transferring - (mpsiz * pktcnt)); + } + ptr_pipe->num_transferring = 0U; + } + + if ((hcint & USB_CH_HCINTMSK_NakMsk_Msk)!=0U) { /* if NAK */ + is_nack[ch] = true; + ptr_pipe->event |= (uint8_t)XMC_USBH_EVENT_HANDSHAKE_NAK; + ptr_ch->HCINT = USB_CH_HCINTMSK_NakMsk_Msk; /* clear NAK interrupt */ + if ((ptr_ch->HCCHAR & USB_CH_HCCHAR_EPDir_Msk) != 0U) { /* endpoint IN ? */ + if (ptr_pipe->ep_type == (uint8_t)XMC_USBH_ENDPOINT_INTERRUPT) { /* is endpoint of type interrupt ? */ + XMC_lTriggerHaltChannel(ptr_ch); /* trigger channel halt (after halted will be restarted in next sof) */ + } else { /* is endpoint not of type interrupt ?*/ + ptr_ch->HCCHAR |= (uint32_t)USB_CH_HCCHAR_ChEna_Msk; /* trigger next transfer */ + } + } else { /* If endpoint OUT */ /* endpoint OUT ? */ + XMC_lTriggerHaltChannel(ptr_ch); /* trigger channel halt */ + } + hcint = 0U; + } + + if ((hcint & USB_CH_HCINTMSK_StallMsk_Msk) != 0U) { /* if STALL */ + /*Reset the packet data toggle*/ + ptr_ch->HCINT = USB_CH_HCINTMSK_StallMsk_Msk; /* clear STALL interrupt */ + ptr_pipe->in_use = 0U; /* release pipe */ + ptr_pipe->packet &= (uint32_t)(~XMC_USBH_PACKET_DATA_Msk); + ptr_pipe->packet |= (uint32_t)XMC_USBH_PACKET_DATA0; + ptr_pipe->event = (uint8_t)XMC_USBH_EVENT_HANDSHAKE_STALL; /* prepare event notification */ + XMC_lTriggerHaltChannel(ptr_ch); /* trigger channel halt */ + hcint = 0U; + } + if ((hcint & USB_CH_HCINTx_ERRORS) != 0U) { /* if transaction error */ + ptr_ch->HCINT = USB_CH_HCINTx_ERRORS; /* clear all error interrupt */ + ptr_pipe->in_use = 0U; /* release pipe */ + ptr_pipe->event = (uint8_t)XMC_USBH_EVENT_BUS_ERROR; /* prepare event notification */ + XMC_lTriggerHaltChannel(ptr_ch); /* trigger channel halt */ + hcint = 0U; + } + if ((ptr_pipe->transfer_active == 0U) && (ptr_pipe->in_use == 0U) && (ptr_pipe->event != 0U)) { + XMC_USBH0_device.SignalPipeEvent_cb((XMC_USBH_EP_HANDLE)ptr_ch, (uint32_t)ptr_pipe->event); + ptr_pipe->event = 0U; + } + } + } + } + /*Check if remote wakeup event detected*/ + if ((gintsts & USB_GINTSTS_HOSTMODE_WkUpInt_Msk) != 0U) + { + XMC_USBH0_device.global_register->GINTSTS_HOSTMODE = USB_GINTSTS_HOSTMODE_WkUpInt_Msk; /* Clear wakeup interrupt */ + /*Recover PHY clock*/ + XMC_USBH0_device.global_register->PCGCCTL = XMC_USBH_PHY_CLK_UNGATE; + /*Callback function execution*/ + XMC_USBH0_device.SignalPortEvent_cb(0U, XMC_USBH_EVENT_REMOTE_WAKEUP); + } + + /* Handle restarts of unfinished transfers (due to NAK or ACK) */ + ptr_pipe = (XMC_USBH0_pipe_t *)(pipe); + for (ch = 0U; ch < USBH0_MAX_PIPE_NUM; ch++) { + if ((ptr_pipe->in_use == 1U) && (ptr_pipe->transfer_active == 0U)) { + /* Restart periodic transfer if not in progress and interval expired */ + if (ptr_pipe->ep_type != (uint8_t)XMC_USBH_ENDPOINT_INTERRUPT) + { + /*Data toggle if NACK not received*/ + if (!is_nack[ch]) + { + switch (ptr_pipe->packet & (uint32_t)XMC_USBH_PACKET_DATA_Msk) + { + case XMC_USBH_PACKET_DATA0: + ptr_pipe->packet &= (uint32_t)~XMC_USBH_PACKET_DATA_Msk; + ptr_pipe->packet |= (uint32_t)XMC_USBH_PACKET_DATA1; + break; + case XMC_USBH_PACKET_DATA1: + ptr_pipe->packet &= (uint32_t)~XMC_USBH_PACKET_DATA_Msk; + ptr_pipe->packet |= (uint32_t)XMC_USBH_PACKET_DATA0; + break; + default: + break; + } + } + else + { + is_nack[ch] = false; + } + } + if (((ptr_pipe->ep_type == (uint8_t)XMC_USBH_ENDPOINT_INTERRUPT)&&(ptr_pipe->interrupt_triggered == 1U))|| + (ptr_pipe->ep_type != (uint8_t)XMC_USBH_ENDPOINT_INTERRUPT)) + { + ptr_pipe->interrupt_triggered = 0U; + ptr_pipe->transfer_active = 1U; + (void)XMC_lStartTransfer (ptr_pipe, (((USB0_CH_TypeDef *)(XMC_USBH0_device.host_channel_registers)) + ch)); + } + } + ptr_pipe++; + } +} + +/*Function provides host mode interrupt status*/ +uint32_t XMC_USBH_GetInterruptStatus(void) +{ + return XMC_USBH0_device.global_register->GINTSTS_HOSTMODE; +} + +/*Function selects the port pin used as DRIVEVBUS*/ +void XMC_USBH_Select_VBUS(XMC_GPIO_PORT_t* port, uint32_t pin) +{ + VBUS_port = port; + VBUS_pin = pin; + + /*Configure the port pin alternate function*/ + XMC_GPIO_SetMode(VBUS_port, (uint8_t)VBUS_pin, XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1); +} + +/*Function asserts the remote wakeup request by device by clearing the resume bit*/ +void XMC_USBH_TurnOffResumeBit(void) +{ + uint32_t hprt; + /*Clear resume bit*/ + hprt = XMC_USBH0_device.global_register->HPRT; + hprt &= (uint32_t)~(USB_HPRT_PrtEna_Msk); + hprt &= (uint32_t)~((uint32_t)USB_HPRT_PrtRes_Msk); + XMC_USBH0_device.global_register->HPRT = hprt; +} + + + +/*USB host driver assembling all the implementation into a single CMSIS compliant structure type*/ +XMC_USBH_DRIVER_t Driver_USBH0 = { + XMC_USBH_GetVersion, + XMC_USBH_GetCapabilities, + XMC_USBH_Initialize, + XMC_USBH_Uninitialize, + XMC_USBH_PowerControl, + XMC_USBH_PortVbusOnOff, + XMC_USBH_PortReset, + XMC_USBH_PortSuspend, + XMC_USBH_PortResume, + XMC_USBH_PortGetState, + XMC_USBH_PipeCreate, + XMC_USBH_PipeModify, + XMC_USBH_PipeDelete, + XMC_USBH_PipeReset, + XMC_USBH_PipeTransfer, + XMC_USBH_PipeTransferGetResult, + XMC_USBH_PipeTransferAbort, + XMC_USBH_GetFrameNumber +}; + + +/*Weak definition of delay function*/ +__WEAK uint8_t XMC_USBH_osDelay(uint32_t MS) +{ + /*A precise time delay implementation for this function has to be provided*/ + while (1) + { + /*Wait*/ + } +} + +#endif diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_usic.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_usic.c index 786e8c54..2440ae75 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_usic.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_usic.c @@ -1,12 +1,12 @@ /** * @file xmc_usic.c - * @date 2015-10-27 + * @date 2015-09-01 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_vadc.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_vadc.c index b37d93ce..e312efe3 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_vadc.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_vadc.c @@ -1,12 +1,12 @@ /** * @file xmc_vadc.c - * @date 2015-10-27 + * @date 2016-06-17 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the @@ -67,6 +67,24 @@ * - XMC_VADC_GROUP_ChannelGetResultAlignment * - XMC_VADC_GROUP_ChannelGetInputClass * - XMC_VADC_GROUP_SetResultSubtractionValue + * + * 2015-12-01: + * - Fixed the analog calibration voltage for XMC1100 to external reference upper supply range. + * - Fixed the XMC_VADC_GLOBAL_StartupCalibration() for XMC1100. + * + * 2016-06-17: + * - New macros added XMC_VADC_SHS_FULL_SET_REG, XMC_VADC_RESULT_PRIORITY_AVAILABLE + * and XMC_VADC_SYNCTR_START_LOCATION + * - New Enum added XMC_VADC_SHS_GAIN_LEVEL_t and XMC_VADC_SYNCTR_EVAL_t + * - Fixed the EVAL configuration in API XMC_VADC_GROUP_CheckSlaveReadiness and XMC_VADC_GROUP_IgnoreSlaveReadiness + * - New APIs added are: + * - XMC_VADC_GROUP_SetSyncSlaveReadySignal + * - XMC_VADC_GROUP_ChannelGetAssertedEvents + * - XMC_VADC_GROUP_GetAssertedResultEvents + * - XMC_VADC_GROUP_SetResultRegPriority + * - XMC_VADC_GROUP_SetSyncReadySignal + * - XMC_VADC_GROUP_GetSyncReadySignal + * - XMC_VADC_GROUP_GetResultRegPriority * @endcond * */ @@ -82,8 +100,10 @@ #define XMC_VADC_MAX_ICLASS_SET (2U) /**< Defines the maximum number of conversion parameter sets */ #define XMC_VADC_NUM_EMUX_INTERFACES (2U) /**< Defines the maximum number of external multiplexer interfaces */ -#define XMC_VADC_RESULT_LEFT_ALIGN_10BIT (2U) /**< Defines the 10 bit converted result register left align mask. It - is used in the XMC_VADC_GLOBAL_SetCompareValue() API*/ +#define XMC_VADC_RESULT_LEFT_ALIGN_10BIT (2U) /**< Defines the 10 bit converted result register left align mask. It \ + is used in the XMC_VADC_GLOBAL_SetCompareValue() API */ + +#define XMC_VADC_SYNCTR_START_LOCATION (3U) /**< Defines the location in SYNCTR needed for calculations*/ /********************************************************************************************************************* * ENUMS ********************************************************************************************************************/ @@ -196,8 +216,6 @@ void XMC_VADC_GLOBAL_Init(XMC_VADC_GLOBAL_t *const global_ptr, const XMC_VADC_GL /* Configure the SHS register that are needed for XMC11xx devices*/ #if (XMC_VADC_GROUP_AVAILABLE == 0U) - /* Select Internal reference Upper suppy range*/ - SHS0->SHSCFG |= SHS_SHSCFG_SCWC_Msk |(2 <SHSCFG | SHS_SHSCFG_SCWC_Msk; @@ -262,7 +280,8 @@ void XMC_VADC_GLOBAL_StartupCalibration(XMC_VADC_GLOBAL_t *const global_ptr) } #else /* Loop until it finishes calibration */ - while( ( (SHS0->SHSCFG) & (uint32_t)SHS_SHSCFG_STATE_Msk) == XMC_VADC_SHS_START_UP_CAL_ACTIVE ) + while ((((SHS0->SHSCFG) & (uint32_t)SHS_SHSCFG_STATE_Msk) >> (uint32_t)SHS_SHSCFG_STATE_Pos) == + XMC_VADC_SHS_START_UP_CAL_ACTIVE ) { /* NOP */ } @@ -548,87 +567,67 @@ void XMC_VADC_GROUP_SetSyncMaster(XMC_VADC_GROUP_t *const group_ptr) /* API to enable checking of readiness of slaves before a synchronous conversion request is issued */ void XMC_VADC_GROUP_CheckSlaveReadiness(XMC_VADC_GROUP_t *const group_ptr, uint32_t slave_group) { -#if (XMC_VADC_MAXIMUM_NUM_GROUPS == 4U) - uint32_t slave_kernel; - uint32_t adc_ready; - uint8_t ready_pos; -#endif - + uint32_t i,master_grp_num; XMC_ASSERT("XMC_VADC_GROUP_CheckSlaveReadiness:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) - -#if(XMC_VADC_MAXIMUM_NUM_GROUPS == 4U) - - slave_kernel = slave_group; - if (0U == slave_kernel) + master_grp_num =0; + for(i=0; iSYNCTR |= (uint32_t)((uint32_t)1 << ready_pos); -#else - group_ptr->SYNCTR |= ((uint32_t)VADC_G_SYNCTR_EVALR1_Msk); -#endif + if(slave_group < master_grp_num) + { + slave_group++; + } + group_ptr->SYNCTR |= (1U << (slave_group + XMC_VADC_SYNCTR_START_LOCATION)); } /* API to disable checking of readiness of slaves during synchronous conversions */ void XMC_VADC_GROUP_IgnoreSlaveReadiness(XMC_VADC_GROUP_t *const group_ptr, uint32_t slave_group) { -#if(XMC_VADC_MAXIMUM_NUM_GROUPS == 4U) - uint32_t slave_kernel; - uint32_t adc_ready; - uint8_t ready_pos; -#endif + uint32_t i,master_grp_num; XMC_ASSERT("XMC_VADC_GROUP_IgnoreSlaveReadiness:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) -#if(XMC_VADC_MAXIMUM_NUM_GROUPS == 4U) - slave_kernel = slave_group; - - if (0U == slave_kernel) + master_grp_num =0; + for(i=0; iSYNCTR &= ~((uint32_t)((uint32_t)1 << ready_pos)); -#else - group_ptr->SYNCTR &= ~((uint32_t)VADC_G_SYNCTR_EVALR1_Msk); -#endif + if(slave_group < master_grp_num) + { + slave_group++; + } + group_ptr->SYNCTR &= ~(1U << (slave_group + XMC_VADC_SYNCTR_START_LOCATION)); } +/* API to configure EVAL bit in the slave groups*/ +void XMC_VADC_GROUP_SetSyncSlaveReadySignal(XMC_VADC_GROUP_t *const group_ptr, + uint32_t eval_waiting_group, + uint32_t eval_origin_group) +{ + XMC_ASSERT("XMC_VADC_GROUP_SetSyncSlaveReadySignal:Wrong Group Pointer", XMC_VADC_CHECK_GROUP_PTR(group_ptr)) + XMC_ASSERT("XMC_VADC_GROUP_SetSyncSlaveReadySignal:Wrong Group numbers", (eval_waiting_group == eval_origin_group )) + + if(eval_origin_group < eval_waiting_group) + { + eval_origin_group++; + } + group_ptr->SYNCTR |= (1U << (eval_origin_group + XMC_VADC_SYNCTR_START_LOCATION)); +} + + /* API to enable the synchronous conversion feature - Applicable only to kernel configured as master */ void XMC_VADC_GROUP_EnableChannelSyncRequest(XMC_VADC_GROUP_t *const group_ptr, const uint32_t ch_num) { @@ -767,9 +766,9 @@ void XMC_VADC_GROUP_SetBoundaryEventInterruptNode(XMC_VADC_GROUP_t *const group_ group_ptr->BFLNP |= (uint32_t)sr << flag_pos; } -#endif /* XMC_VADC_BOUNDARY_FLAG_SELECT */ +#endif -#endif /* XMC_VADC_GROUP_AVAILABLE */ +#endif #if(XMC_VADC_SHS_AVAILABLE == 1U) @@ -782,11 +781,14 @@ void XMC_VADC_GLOBAL_SHS_Init(XMC_VADC_GLOBAL_SHS_t *const shs_ptr, const XMC_VA /* Initialize the SHS Configuration register*/ shs_ptr->SHSCFG = (uint32_t)((uint32_t)config->shscfg | (uint32_t)SHS_SHSCFG_SCWC_Msk); +#if(XMC_VADC_SHS_FULL_SET_REG == 1U) /* Select the Calibration order*/ shs_ptr->CALCTR &= ~((uint32_t)SHS_CALCTR_CALORD_Msk); shs_ptr->CALCTR |= (uint32_t) ((uint32_t)config->calibration_order << SHS_CALCTR_CALORD_Pos); +#endif } +#if(XMC_VADC_SHS_FULL_SET_REG == 1U) /* API to enable the accelerated mode of conversion */ void XMC_VADC_GLOBAL_SHS_EnableAcceleratedMode(XMC_VADC_GLOBAL_SHS_t *const shs_ptr, XMC_VADC_GROUP_INDEX_t group_num) { @@ -857,6 +859,7 @@ void XMC_VADC_GLOBAL_SHS_SetShortSampleTime(XMC_VADC_GLOBAL_SHS_t *const shs_ptr /* for MISRA*/ } } +#endif /* API to set the gain factor of the Sample and hold module*/ void XMC_VADC_GLOBAL_SHS_SetGainFactor(XMC_VADC_GLOBAL_SHS_t *const shs_ptr, @@ -887,6 +890,7 @@ void XMC_VADC_GLOBAL_SHS_SetGainFactor(XMC_VADC_GLOBAL_SHS_t *const shs_ptr, } } +#if(XMC_VADC_SHS_FULL_SET_REG == 1U) /* API to enable the gain and offset calibration of the Sample and hold module*/ void XMC_VADC_GLOBAL_SHS_EnableGainAndOffsetCalibrations(XMC_VADC_GLOBAL_SHS_t *const shs_ptr, XMC_VADC_GROUP_INDEX_t group_num) @@ -995,6 +999,7 @@ void XMC_VADC_GLOBAL_SHS_SetOffsetCalibrationValue(XMC_VADC_GLOBAL_SHS_t *const /* for MISRA */ } } +#endif /* API to set the values of sigma delta loop of the Sample and hold module*/ void XMC_VADC_GLOBAL_SHS_SetSigmaDeltaLoop(XMC_VADC_GLOBAL_SHS_t *const shs_ptr, @@ -1017,7 +1022,7 @@ void XMC_VADC_GLOBAL_SHS_SetSigmaDeltaLoop(XMC_VADC_GLOBAL_SHS_t *const shs_ptr, } -#endif /* XMC_VADC_SHS_AVAILABLE */ +#endif #if (XMC_VADC_GSCAN_AVAILABLE == 1U) /* API to initialize the group scan hardware of a kernel */ @@ -1190,7 +1195,7 @@ void XMC_VADC_GROUP_ScanRemoveChannel(XMC_VADC_GROUP_t *const group_ptr, const u assel &= (~( 1 << channel_num)); group_ptr->ASSEL = assel; } -#endif /* XMC_VADC_GSCAN_AVAILABLE */ +#endif /* API to initialize background scan request source hardware */ void XMC_VADC_GLOBAL_BackgroundInit(XMC_VADC_GLOBAL_t *const global_ptr, const XMC_VADC_BACKGROUND_CONFIG_t *config) @@ -1637,7 +1642,7 @@ void XMC_VADC_GROUP_QueueSetReqSrcEventInterruptNode(XMC_VADC_GROUP_t *const gro group_ptr->SEVNP = sevnp; } -#endif /* XMC_VADC_QUEUE_AVAILABLE*/ +#endif #if (XMC_VADC_GROUP_AVAILABLE ==1U) /* API to initialize a channel unit */ @@ -2110,4 +2115,4 @@ bool XMC_VADC_GROUP_IsResultRegisterFifoHead(XMC_VADC_GROUP_t *const group_ptr, return ret_val; } -#endif /*XMC_VADC_GROUP_AVAILABLE */ +#endif diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_wdt.c b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_wdt.c index eb515a56..c7164684 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_wdt.c +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Boot/lib/xmclib/src/xmc_wdt.c @@ -1,12 +1,12 @@ /** * @file xmc_wdt.c - * @date 2015-10-27 + * @date 2015-06-20 * * @cond ********************************************************************************************************************* - * XMClib v2.1.2 - XMC Peripheral Driver Library + * XMClib v2.1.8 - XMC Peripheral Driver Library * - * Copyright (c) 2015, Infineon Technologies AG + * Copyright (c) 2015-2016, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/bin/demoprog_xmc4700.elf b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/bin/demoprog_xmc4700.elf index 7153a007b7333f0c35540030bc056d83fac7c70c..b57c8304f4812627d64955ac1a0058a5561c3b93 100644 GIT binary patch delta 153914 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 delta 152080 zcmb@v2Y6IP+dn*W%AVcLZn7yP8%Q9eK_dZV=aZdLM!2}gr^FgYIthkA$`%m`+&RO!PmjJf9ry`bIK$XC28kG7p%!y zR4}knPM~Nc!v)J5RV+BsD52#~puB+RXFQki{D$XuJXi7jf#(LETX^o^A>&{8-oqnX z3%8EP#6!H*y5M%B^0H|`R^uvoKis&itW)qx|DqOMPu_o2z;(`fHW_qS0KWE{YR#2^JQsTW^Z7+`;)H6S@UThSj zwOsc~aasOZ(5-1L^8|>_6ijdWSLlgWGx{{X+(w&`-zNP?{=6C``ov$BF`fgDw(QWS z$z`c`$nV_B#@*iEiJ@yEM_Wz8k4y{P#^fqRe`&AW5~Ux54C##j>stCm-Tw|X?#&{ z(lft7t0R5VFH7x6{-b@;uZil9=GTE*{aXH@6@TQ1ZXT!s)fq6XAiqYdM`60u9tCCN z%K?0=7qo3&B9yHRHezn?&q5+d+aW(Al86JTir)Z#dh52AW&G)UQKonIGTqDc=-orl zINd$9)%$#UB(`}5ygB+a`6XH{$!~it5eA>Wo2p)cN zwC4A21n%+u$KAksH?Xb)ZiO`!_F_R)%gL!(f8D#W9<_MMP4{~DO3>cBcjL)F@7>sh zXIa78mSz2H&jR++=5_^_THf>jf{<(#MB2p0^98qBwT(RwjMg%~kE{{zU>|8+R^}9p zYCWu4F4EZ%Pd=W0coLe5yfi!&@zloC1i~qwuizi|Lh_UMx;Ok}d3!u*HI4evKKZ@+ zEA!jA4tccmeg&@?k^ zi;0hw`>H1Nm~Dn|HGGWmhM6&62))yGAzY36D~$EyE-5s(`PrK~KGu7oDN-1Q*>}KT zkXs=%Ono90Si!0w*JB~es+h-M7YMPc_OOL4NY;h95Mgr?Uas-x_wpF}ORL#PO_)bj zSXg%l1NcF%0fk}RZ3yCH3UFI9zCdUEqXI%ccZVkJg?U^-0e2GuClrw2?vR@&%#-p8 zLbvurL+b_U(}c)zHzjaUB_h||s40M-70}x1QracVUt}4OHwFTagjCkYmwFNQ9JRwWFGGM`MH2E*@|s;k;+v&|#;za~b6Pe)LgVwl zMb)*-Ilk|6;IxZ5Ua#m9nqA5Xc^x3dF68(pp9Brc7^xD)8uko9hNkV20pzhNFm0bx zQ{R6cg1=UPVf`CLsqI&Q+nPTdzyT$~=WdR=pdC~|z}>k0gF^d80SQ*`d|2?U0)ke; zX-NCGOoN&fYhZl<->H~TP3ygdu;`G2Y9}%~>#GW{*%dy=D%S|qCslmYL}p#Cwf;J? z;-W&ewk91%yj>gftZj`D^NTXHqxD-3viOn$x>#>D1n{c@x>}P7{01PziaPxVWWr?? z)yv(y4HERblHJET&U9aq+*Ccx+<#x7@5@gkvySYQ)EI02d_XH{!ox1gUSDf z5!V&umcbndA^nDed@^{u0)*UDx&kto)T%WMxuqf#Wbj-UsJpG8pbTENkb!p;X^ITC z{T+;dDkx0`FVL{RWF6R&DU(_}B(%FST-Gh?g`WNf)%l*P9LbCBxP(vt7WGdQ|KTku z^zRn3+>37?>Js`Pc2h?2cb206{GMU6`0@bS#!=OM6+id@=zn0?D()Kt`eSSyZlT|X zKd2vX3z^Zia!p~31BrXc*MLh5T%aLCg%mOQE72B&-e5E0UjCT0>)tl)M&sH0EZSGh zfyL+-Vivxn33tqsS(*sM%$sbAV9eO*x=4!&U3Q7=n1(3ssxkL=3Q;>|!EIBFj4A%B zDZY$(u9*(5p*JPCE>*U`mH(Fkt_63^kQf`Y^R6i-#azOBT1=OTnwS^!(vP~>5i4~uf7cWs^#j^H9$;kk6tp=&4@c2{}$+xaDCR)x!OfPp{ zUI*ccQ8C6qtHTT7QC`^~RPH60@Wje>urT#)B*^DUlqW%NRl5h?pk!GH>!sC@nk-p} zhLtiNX(}$632x!r(oG6a3Aq$JC8IZ@yg!qA$<-)V;}xlw`n>{bPmI))Js8>hZ)c|` zOCgNTya|MPLX0T&`!{F;OEtYygbDzu(oWYxzAn`izSUo-(o40+$n9ZQ?qTICJp%eM zD31VI=Syh;LTS;Y*8j3D(z~}n7}%E~+wA3aBi3Qde~HNQ;t*2|H?{N1Hj-XHGbmsR^-byd9tD^@`Y zia?k*T~)6GUI#du@Sn)4^c`oQZQ>5#`YBBUQZwqH9mvTHnmQ*48Otze$#-azsZS%~ z-EkN$3v9&n@b7+EOwI~h(K1_$xfZS#EmK4F%Ye9!RgXeug0XtFE4tvL->d#e7ftYS zudVS&j3xMJ^~@UP+wcVNXpgySWK=Z-AHAm(&0xME&Yfzj$W)|M1N8|HU)=?~a-Aw_|4f?U)&kW2RXP!fj(@eoVj>gpFbXf0>VMk-?at?q%42NvflqUnZn+3l+0pE1Opja! zASZ?$jTt3Z1IUeGM`Jo2O$<94Gg@v!Os{BmG-jlui9tt`5i1*1Wk+MiN@h{)B-9G+ zEGn1~aaUB>g<$-^z5{@cB6j5J@Z?xoO7m_Ge;O;h)j1C;*|1AftUItAW|c-gDt?H_ zMt0RcgJcxHK}2IZ?WTT$h(%w8Tg1shs)}26tV-ZgRXjBWNM|Y7&Yn8G21|$h91ryblVR$IN30QtwCmRvSC#0$6%N3 z;rHTYvC#MOXXJ5YTETGPv|=0SBGU>2h0_WGg|i9*g|i9*g|iBQ0xq0YFs5);K|swa zLY!6*Dx6jjD4bRhD4bRhD4bRhD4bOkXN8N*Dwu}CSp|W@Sw&5d70xOi0+4UTJJX5| zfC{G-+Y{u-kUg!C`=Q5QG2kk%bNXQ2*@>dBpchA2M7L-vTorYyaN8}!RY^gL2fNDUlYKk%?5Yv4(;;I8mMumhEL$Icb%nZbg zC1b7d@nUGI=e8hRTYnaIy9T<(>r+q-t!NTVP~^huzZbyUN{wNSrl5%ma9it0Hc0_K ztMu0ZCMzIdg~;=c0uroWNLHYLpw*rFrYIoATDLU>XsUwJtfN~2ysLmrtN1@A}~V%HSJ8DsZU1|YFmfNGfSl*$7;U=z-&d<)QTf8M*+DZ z>lEqcD!SIzL5iEFqVlY_NcWxsI$9OC0hq7Ix>z>|ysu)qT2n~&fdcZaUnp&XBI{*6 z#+ZdFrjIq7z=sOxhb|EL?Ll6Lgl{I3y-0`4B3uF2XZm@TK!C|#spJUjLjtQ5t6?W{ zwTf|DKU3%$72^}WXDDf{{t*PYD!R7ny)pl@cCje7Ig-whV!I=$0&ESrb|}bgU7(Vk zwkT^mnRY3rfMu}!cB_~KTm2sW8Hf&A`DOpTf-BwFPD5U$ ztr>>hHQY~`na0l{RC>dDg|#ZnV7+!*yVx|!D8Of}VoX^D1cdKh+L&z&hd5VNR|}(= ziwR_zwRGfeCeTXJ8`dzUwzVTxwYWBl%x4{A0X_r(6N7;DD(Tv)s08H-yYh^d5FNCt z(#&>BLPdBhOdxgoexq6Kjc;g3eOEUl8(yhZfNtCMgk#7SYRGpCDaT6R-7#bZ$$B`3 zgxVA8siFeb00O-fkYIgI;7LUnv>qYQTg9YUFA#W20cqA|0(}%&rj<{iuZqdGh7)*N z0Tr#?1fEf3RjsE8^kYm2-QsJ6`YXEH!grR24=^4>GGpmbYjCLJ-bM~-)%94q+8SK# zxE;tC?EyW$1X{g(QqIE=SsbM&XH7#+BqX8;f&HAAykdRf;Hth^n>;+RCgK-?8d)ji zGsyp>6(}+}Onw1mQzhaONP-P70Q-t9qC?_CK#@Rkjg*Pa0B-?|3MS;MGVuYxJ0kI~ zNs*k09GAy5S|FMUHwIAHmh>I0hKu0_X1v1m3?Zg?RT6)sh@U}yEPf6(RW4ERNWwFJ z1iVziQwb~EmMM4z;1cPON25hjH!3KQQ-JsaF>)5?11UcO?1cEYp)6JA>E70Y*OmRT%X!@QS3tX!UZC%mX4tWlt^$OY{K9QZ3ONfu1BR>Gcs+2L zs*ZqNMVzFtuc_=7Qa*fD#2Ek8hc~$RU=;D;>8kx-`tW8E7akpI;Qz{pH@Nsrsmj%D|t~(Db6z;zN{Le27wu4^e9IAxbSiM5)DxXkl>m!Mw_T9`k_?C1vJ)$~n>` zXK01l6vzA5Fgg}`|LC_wKD__%2~cQo^>3Gy4SG4Q zeg(*lRci`nqHGVg7_KRpK{W>uF285n_C39reKzkso;s@>{B-C zhZ;Wx%H*uMK*nGBDm<%{EUt~Y7G6_IR!*veIx6!KFDfe{)L=#Q7l=X`kS+5m8f!gh zTx>J0I+hPK=6v!rO@j%dD_WLQ<@bJXSNVC2#ovt>OzIb-%G>UEWYORG2_W*rfb#yG ziLLVf&D3sSe)7Nm?^{6h?Xfs>-{99e`1ezN_LO2KlRktLkW* zj`ISpkB9H1$p=H@^?^vDk6xoSLC3-(0D6tq+xlLz`sg)U6BXe0(QC9ODZuBW*Jw>v zK)^?@(RxP#2|jv_R)GS7K6;JT6a}RC)?qNRrYa!K2d6P4talZZ>7&AxHCi(iP}4`pz?!MQfF#uR(QCA3sWjyH=rvli60{lqj;r=MPaPN*=sV7sQ~G!SHGOgC0i0Gmt$plttTXyT#N_!l{Tskp6*Jy<`Z$1dO3x%8 z*B`8(^ft>uH^ukVuYk@gx>>$)a9^woI@X)TJm2>}0Jx}s4PcRP5@UW=61MoB`5nM7 zif4!K&uaiKg~w&e*F(DxBK)h~1^E&cv~KIQ;c5Ex6F}Zktio64B7i>?VEFnl#eXR| zZr@ar-Bp0k_r^H@_Y@HDrBSyq*eDZ(e-zUqjT0~{D$Vj6tEl7b6(FNSibnY6!Sk_V z6kzy%qmqCE+`ji%7O@KO*|{HQu;rr_pF~W&ib?RbW&#rw5cFMPOfdzd2>EFsr5k<>{yt6;tPCS$cOsl6SeZ($;o~I1%2M2JA14V`83p)!oFrIf6%Y`9P7ZzEZ?2OrK6s66swh^o^uqdwWD5j zMQuO^{XQQjDb_=ddd^X-whBnF>vWzG4bed#=O|V?C846QZoqOkb^19+vDzD98dBft zX8b}!I7hLba17xb#maXK;T*;4?ido{B*p5X=zKoTQLLUSD&XTB#paAi@e4L|LPbnbH$2p4CN0DXvI7hMis+epa=P1_G3aIGg9L0KuWFb-2$4QFS zPes-AagJj3S3qsy=N!cvV3b0NV!UW6k|Un+K?yjgffrEHBG4VBB?Dp9a4cHQMawjn z+yvfOgbHn}+(z=lsEzvVWeCR3K;t*)v*|%u5*}(G6n&ZeHBsZWfPNUUfpomxfkt=- z0um$j$hb7Tg^b(s9X?vz8Geko;iy5v9p4YR52jWYhb<@811<)H{U?}QM z8UyW4TOx;nnP48tKxiGsz?F-C;s^rx9V$LkrA4I0cS97KY+8I(qy>V~;`0!IptShv ze<(p|@moO*L22>7BOM^FD*UBjk)AK>!-m)pjbfhZPf5%xM4-VbCimFSOl~wfiI5R^ z@F%9%q>jLGBc6#^8VN7o_QYzxFqH0ks@)!NF{;hlzak0aYIU1Ko z^`mkjiF0UNTnws{l)}Fh>C#WiH%R&_thMD{kl&DWFAF>rKL)kL7F-=&sQ#P$l+*(t z!KRj)2fz6QCLlvZd|$p{MSPfzoQd{-e+gV3?KrtkuxM0q2edlm8bKX_bs*6KBWSnq zj{uFHq7_4Q?6eD^2t$U}lMLrzg9!8jX^!yEr9tJiW+W}cilanV)h3W~0;;(Pw1c#f z!had%rq|YYt%e`cLICv7lp5h{kCM?> zY9YqBd^0F}wIZ{8<*0S7$~(93cgCz!S?=-GrJ~O@R!g7n4D36>mON&KTfD#8&VM#Z;OFgj(fwd;< ztDbm;I!>9aj(VcF0^l(hYnh(77(=V^zEnI(S5e#KT;^X@JaX1?q%f$KkLHqKIVx>3 zR*K#u@O=nS@m8SVAHrC*DZya1G`v#0kgKG!F+-GrpDTk&Xkv01gEz_Gu7;i?JW|b$CkI2RCP&}nn9|Kl*&Kk4HTz5%u2PD2-}hg zh4QzO^D)J_hs|#f)5SlVFy%DzU)o*{kaE^mke9s0G#o@Qgmp7`wa`*(Jw_RM_@CTY zsb&KWI?Uj3s!>Ig@~>}!{PAx+WjS2)ICa`Y1eHK^=}xN(mbp+cM*caO6yARN4G0=bhr^rx=y)n$ri&uTX=dO zb~pY)texu_717JfvUc48Z5kdqs|6x6%TP)=6*G&=@~XOBfQce~IV(}^{}fdZ%~r-q z`W*bLh)2$vMNwX6PJ)VAheQ-gQUNLxS&ivlyrWW)tr(93U8dDH3X9wbiSNN#R+ZE{ z$|%_`+rzGMiVfw73=N%}T&zHd5VoA+u@O0T%x#FtRE$d$WeIr2BI`w_$Y3*Zs$(Ov ztw!$$EDJDHPth%A74sIM>r+VQRdiiRmfnt)C7`hs`DeF{ta>yzu?X{mLgqxp{EE_X z3`3SoDMGdfWFgy_6h${j(Pgo1q!*#PN^!$5d;&|Gu`~@^lGv`Y|I?N|>@g}8VXhh% zVXmZ@PbeMlqAQctL5BLra+0$;7t&Q%bQ0dQ$a<5l?EWI+Mii3WugKCB*)HZw{UT%w z3d!m#GHyl@S>0I~8W$nk69@fej=}cbooTu^4u3^*xok>V%d0UJ8B~a40*C zon~*1%%;vw%(nQ9M=*%V!D>jPP4+rn5xv3#zHM|75P|2X~G(2+F2*hO0U^QH%Vla)en|yu7 zXLM&(8CS@Yt9VWo^1P*D;QWYedKGfKg7wgIa&9Jl4mrVQMK6ALiHrhTeyEVuwr5u%>-Q>VB3R4QN0LW0dJ^TjJ7UmfVf_0+ zQwe1DssQs$WNc)1UMZAp7ysQt$=6iO50R9RS!DF0j({HNo^n(|9!iWPBu>TrR%lJU z?ukPB%MEbML4=US^g?Sy#&fI(RSN}nRRUKR3aqYTvd~!UwIV5M@S4i7KXE-!h5wlpbj<7KM79s9lNZeOv_)A4g|1WDUd%S@~ zXeSiX4%8Vwsc4xWSwrB!%NG@GwlZQh;>#+7UkvF4=mXJv&ib0OjM0kJu7;-z#g5h) z)v_^>3EWp0_E9vu$pO)j}_TGMYf*_UsHr^c_G;vMYhk2`X{nZv950_ zLU*W;Zj++>Q;ByJfvjw8io2>a%);Z^Le@<7z@ z_H9;GuaOD*$oR%}40{j@)n#i+GO89fx>pNzBq<%$A;Z>@tYmf|taKDt@DS>Fi*84X zL0(hm$r@)6YskziXGBtK=kuvT4dsjwlQEkj)F@U#iHwY56&19hP(fvbtdT@;q$)j& zRji)MB0DEbkEHvQQv{QBk=%G$ytrj^ORA)g*Oi=6=$KMjQTOWxq{=_gOy%Q z**z4W?IUGP;BrzQg{i3|&7~yHg@NT>kIl{%hi={H#Iy$a)$>1S*-F-0+RsHk5NuB=};f;^`% zX^vztx5)@x1<|%Sk#ggDty>o)ePI(ge>@qH9 zay{h}!m9QpD!B&u$V@Y|VTuFD@jdDQL&9dc?v;;IkPSOiP z5mq_9LHtcvFU!t}OV}2nv<-$Cnqh259%glC|G803*ycIMLj4{^t4gJsg{NWm_}WckejJUzr$j9$&B6*+ADduxzRvqA61zTw8nM(CMlM69r2;ZRU_e_dx3RvY*2iR2!ibNj- zP~1kf!Ca`Q!r$QCb<`5FH6PJcxo^c&Wf_7V3P?+H<~5;GqT2Ipq7wo@*0Y%X-K%z_d)1C~ue~GP+0F7042o(VuG8%A z&FLRvhU|`ZHm4&oA`tCtPDlDhn%~}>&TwWle<{Z1^i`nB_B)%?KL?N#?QBok3LrPy z*__Ty%#U_9r+PWhdt$NS zq)~HhuI`MA9k0gIM%92H3Q!~%-$JyDbgnR97c)Jukww-Lpg^OC82Z-`Lu6S5WnLV& zyUUgp0ZgaVql$rK>nPR5f-dIlRT&GcIiIr;u>q~a5R;?uw$Hw9zGK(&<)Go;PU!n~ z>Hm2xH~!21EMvwk)TRmpA+G3db)##;SBWZ8;f+R96sG8Qb+vEBw6|)_f*>>VNzkY* zEM~8U!-=8SA@4=;aE=7e}&2WRG;`mW8%K{j}s0v6syH-PnyKzcQtWa2SU zR&s5{vm{Z+K)vc1s8<~W^{Qi_Ui%oR(VblDC@e}H=w#AxpmQEs)qzf*eV{Ysb53;n zofDleljZd7h&?4F&H@W>;7=O#EZ+EWWe}{>N=f87cF*DbCfCqn?DL!Q2k41$j&G{4 zb9|HGfOC9P;hp1~Ap#V0TK1qA=lrH3an5h5uycNs;ec~~Q{kQSn+%KChCSie@c3p; zeB-$H3&%H4GAhnFzDdA{bB=Ek2)W~&^P3dmi+9d%Dn0Se`Aq@|anAWo0>L=v{AN?= zNr`jLZ!)H4oO67WK<$L@kVW<5d0rXEH;KxLbB=EkXqu41^MSc>&iPH^TE{u(H)&j6 zoO6DYK*u=e{3d}eanAWo0$t;r^P2?nIp;S?hqY7Z{3anoCOYRg3AtsWbAFSMPbNC&H>oTj6O-)Yn~Y14iO%s&LP446 z9N#2micEBlZ=S^b0f*`n*_&y9$;V+!rYz>1-!xkNeSVXb!!wl)f^9$_@-8U7d8nqs z`zRZaw=?P{hJ^)afBG;St`?s0z}P=oj>^Db@2vz_de^h^dXw1Ry~zl>y&nJ{@ZN!} zG;d`zn;h>!=o#tz7I^sMzITBWny(d**ip6)ocMv{Cw>CHGms$Ce4o&e9N$Akj!a4> zBqUPp95@{c^~v^u)6Iwx$@YQM`3M@x_JLD|&1Cz)DZ{R0`@m_4fR${YIA!Z~3&TEf z$}|=44OLp6!8WSD2Sf?}UIN622;=vqr;raW;#0375qh?!AB+$IAW?~VNCCpc3m2_R zJ;APHm8Jj1=#Ub)%2Ko(2oS>v;bJdTlE>y`i=h}i`T!?qJ?p{`N9s457F2r_J$otT zskV3-F}DDwFvkz4WW#osB-e3*yt^XTyKYcn7$}zyS^ckuKY7bcj=o7eM4< zZn~%_a{+9ZBUlyqhuH%xxQz(gf)TX27Ic(KP;^w;k)X0*1i|M4rYR?JB&AFOm<6<0 z3FR3KEaoO{hHA*W|=1^5*rve%jz0S}WzxacKi^4y{PfWZ^UBDm&I zyb!YN1b;xqKZ88&2UH8WkaSsbRg`5HSxl_ai}H@oFad<-8Xzjrx3;RVd@I(50erMa zwThCp0FO38tH|X|KJHJX80<$g6xaE-Jq#Q4z4Zm_W z{I;`Ud~z4r^nN;Ged<05MZIw}snvZFes!OOU)?9+SNBQy)qN6v`#uT7zE2{L{HYKn z75~52lK*H3D|N!3k35$C_9$)5KMLInE~7{zaC8!xVsI?LX8QFinX2=cfd5qx7=8`> zZvQrj_4&U-vI4@;4L7bE*aFIEbr*$F*GSeywe_pJDEwzp!qTtqq6qobWfXpO8HHb6 zM&Y+FqloIu{;j3FOF_E}O=v57QP6Wh1pFU^Bwj?l3&mOo*&Gqkk3+j{?9=#>1eCQv z6Y%!{2`EQ1D+fsKosE8ii< zLPg9~(&xl@AX|(SQN>8LS^c&hpeI%zH8$4q#I~V?V;xUSg&j{UL?F&_#Z-jjiZLu8 z=Cpj3VjNFQQ8=EM3Ok+{!*Px$rtpp@#;}Ml^u#)%nI<@%n5v5jA;%RXWF$DQ7y);J z)(MU$M%(fd98Ziu#{|a{BhV$m@x%ypO>jIh0{ID!Cq|%` z*YU)*u}AHb;J9J~V0OO*=O&Fo07fP{o)}HQLa^hB5i(?w}`uNTfRdb)?&`^W5n3o7K4#(i^0gY z#b9LHV$j*P7zzX<`xb+deT%`!zQtf<+hQ=XZ7~?xwit|TTMS0FEe0do7K4#(i^0gY z#bDvK#b~w9P$hAM>}R%jwb3xf-e?$OZ#0atHyXy+ z8x4bzjfO#PG(;a02uAi91{YxO6r7_#FtX1u7};kSjO;TE1tS{`gOQDf!N^9#U}U3V zFtX7w7};nTjBGRvMm8D-)kZ`9SnKS*O0LfS^KD(9gk%<14&U4Qy9}%QC?@JN8Fpo{ zcbpXN)>)>6a@b?d*Y(|n9P@3CX6(f0D?HAJqS2*nXQwv^RR#OvIHF_4PoyeGX%Kbb z*P4=QWFE@F=qB8n@rrC0dN|uX8A`G;@c@+{HxzD7NDLvY967>bFF@OSd6{DL1b~&O zcsOH|2o5JWf*^mWNL#7;VuGy*s`cYh1fM3Dg0#w43BF6P7YBpa2red=U5;J;Xu>B5 z|H0@n1g`=t9o<5>>-hnt+%LoLb&>J4RB}JFlUquuTFLWhrSS8yorqNf0p<{7F3Z*P zkmUUE#V)c$)F@yxJ_S6rSUB*AObRU`;zb~KGVlxn#}GhMREsgRB8B%>$lb5Qj;a9V ztj&;a=lO2ih}1hMK)HunWxG;I)VY^Lmm#TC49DhujEkk)=HfV-!s{>O$hH)JzGvxzj*&hgrbS15Gp|n4oY*I#Dr+~qQ0&YM+ zNKB=KtckSJKw(Ej%z_Bpxiq9LqpXr)N(xy8rm`w!E=e;EDIsSmB%p-YUNN_=+Cl=3 zkTP!OPOM}M9Ql9a&_sFDnWEYvKmlOwmgqI&{Y`}i=Rr$ zeo8a5WfH=Vfj0YQc;I6)AtZ2HWe3#QEs$7_=R{#!b^yo+fjn#@IR(p3bO?Vbf-B?D zar+gRNmst2L+8Mvgh409MH^D+kIS}AK>a2-K_3%bJX{PJM|@bKp=Z{)`eBhTyIYzaPQ zx_7ma;})xtF|KrP6SQhRR=St>pztv>yfHY`&&SFT;~+;937F{`@<4eZet@<>>+mPt z9Qbs})Dw@&PLRBv?jUR$ zi6C+r@d#VSqrkh3YzXxkV}Xe_b^;S)41c^Ga8)DI!v2+N#yYT7H$Ff_4WkDlY8uZ&+yxbY`)x0|sMu}_4IYaq=x zx`U{@@g|6R7&AfC(-;FxFXK}XJ!u?6xVP~F!hMWr#P&7%!-%Ji$ANjqr~q^O89yLA zK$!OJIxY!F|EL^W8!y^1QZJzjoAxhtrhU(j$$NINf8E84c8rF8`01v-w&3ct9rd(P zDTPs;hG{QanDzl*%U;Pa?d1&@@7pnhr&NaxQD#LAjIJ(_VOC8*&}~F(Yb6#NgeM!u zYoFU2K0KV}g|si!W{)(_QKUj!kDov>squV^1Zx{q%sg*fGHsL(vsp^7nhAYrGf8h3 zq*L1@xhH$1^s33oS2mmU{)BACZ1)NBXgOp2=@V=!CGEA8RUq__*R9H4wvaJUPy zGJwGz-b||f7XGQ1bA=FYf?NVUu>tL{HWn0~VP}z+BN~+p&n;%;Q3V)rof@@9o+-fX z$w7_Qj%ifx!>^2J721y)FE>f3gjS(VcIoQ?6#JajWU}iJYFn|z6gJt_1*IYqPk7Op zXekyU{V+*iVZE^tBIyqZkth~Q=QtJ|fGQ?i1#pG6jqt&hNUjXEvK1>n<{3ebFS1$+ zNSZ31=Ri`NR+I-yxotJO165)-P>;Yn2&GIxs1_p8&kHTnDzOZ(+7j^|0(0mxiqzJK zzW}hL%)_n=QHqyq$Fkj24qo zS^n1;iCI-H4n0hUV@)s&ttQIDV+ zl>a*xtF+@@mGG*o#ZyVeH($lD9Gu)3OqC)Lt1k?c{-{>{9u)4Sc%*2@&u4fHaaFdP z%g{DEf**mYqaDFg;U76KD}wg?h}_kUhQrxkUG){YQie~wCjG1RkbFXh(?-h1;pJ~h zPx!)US-TSix$sDl$B(_&^{UL9YfD8b0qau)?fD^r3l`(rpx~zP~fK{nfJh_{qh?H2tl+IxzJWL3@5k@SnQLn4?JY_#w$Z zb$<}P_qz0lm%k2E_P-&2#_zY2+7>46pW%nXc_U?s@NZ+Kzj#nMo0mq-?UwlW=A~v? zbHmStWPD0-#Q!h*plpidLJ9x5{V7~}lq?yZK2Bb#PJ3AdC~tm-;Q42dgU!SzYS&m zf(JE%pUZgcQeo(t9l_7d!ib3AUx6VJIIlYd;orwYF6u#ac-}i`N_ipa4*xYuCWT`r zAcPtb#n6i(O7mm-23~#!t6(R7hS*qshT^epVd!N$f*(%)|5*w z9zPVH%;t3?Y`%>RAcQFjr4dQf-*VbhPQHqLm>&}B;srVPZ?5(ct^rQGhP_V_T%v=M zqH_dAbIRi}g!i64w|t{QibC}f3Qbg-OG@gJqDw?TEr9hEssld{g^#?A^{UzoDs0CH z;eX0$siM2K#;1=RItJ;0dvdO4@ zd*4K_hnM%Cxc?mtQQS2pJ&zv^(=NM;G33L8s>)BWFoL0UJAxlh`u|xeiRoe!@Y78N zJMuHY#_}`R#+KywbsNpk92?Eg8a&|xV`SaG8&-P`>J{-w(Se`3cyuvH&Sjth9+!CD zaAo{mvK;4$*M+-bVUGWe^xT^pjxLa0q0(oD!{uH$C6uy3$B7@$4@4SY_5A{E9%G>T zO9|gMRW{Lrx#5?m$~k@x4Sz@VCtvG#vE&pCzrt|EuylLq!|*RVTxqIIisiZo|I*Z( zcD4!2DxOSE%<=bfcyw5ni(1nlVs>tLZCIvOY2G-37z&+zY-08EI)j;b*da!235LyS zvUCM^s|XW`xYWyjg3AN^tBr@X8~%~_EZlAytYBrLflb5Xrr}oJkzFGEEK52`k<|tS z)gKe5iLW1t&~esZ(@6>m>Z|y!k4EB&qxThY2_t@A#4C$9W26(|tm*Q_lsvczeCRnS zG+ruzsHgZ19L2AiJ<6JaWl%%U@LBf|&^KVGc=?A%bCJofd!kKm+t=`0 zuFqwv&mOf*y5cg8K;dRCH|`r$F+ z$^^~SS|Q*Jy|ixD{T;JeJx4QJc{;+(yks*}ttS56fnKAy)f~TQ8~S}EtaW1;sFh;6 z>%IBUoY(zAs7i_*I4%^`@GS1~EJ&OnmL{$WVPgg?3&+e2r+n$E8z2yHiwr zdnFYtUq<>36ZzJ^qnumiN%{Oo40pk*i7A?385S~M)dZ@>K5UpWMa*D|p2a=LB5?~z z6Xuh20d`iKqT~>Yo4$jXJ1>%QGS*j3F&^7w=kWgkOmX&GzQ?1>m}+Hj9f726~3!r2?>^VQl!W(Q+(B*;ZDmKJElH`eiTp4>qnJ|xZd0pne&M` zd6zU=S#k}=uREp~wu-Ug12n5m{OI!~gO@>EdLyiD?4E zl~)j7t0mQBmZXTfPx4*;Eymuj8dxrVfd^G}s`=|Fns}uYB}|_{gM6nMuGf+H=3N=? z{V?Af&`U!7B31v}WRv+}Wkl&w40m{j3O?A&_r*C>5Z8#}if1yMbdVyFk5feF-lWf* z$?(lne7}Lcd#Hw=lCtj$d_UKO>Jw`6{ZcaDwN&d!+5!34(iUR+8kQn+>l~`AF`I1q zCX%NAOw6Ii3~$%@F1DBSjRp|^bR(MbKqlWa6Ny>9hjPrRd`}!t`o+If+J`vgj&$Sq z4j5FK_>qqj6Iz7dJWTPXs!&}QGTb?i%xNz(ytFpc*BNKikxE?Qg%nhw2;aAi9lwK^ zx9XGTw`mMlT0+sK&e5P!V~Bq?z_8a#F6$g=%Id`Dy+i!mkV^L!T)T|sv7YbK_xMi7 z=wON`gA5;UtJ3-_85Rwvf}t1{OtHT!@pYe~x#<;Ykog=j)yh%9!e*p7oXK#{L@G{F z;X$8~eorp(10GbFUsH8Kht`m}m+H|5oM8C=W>mJjFBMO0N`}=z3aXFm`ccCxsMP$z z*e9_A&lH2!Gravbn$q`C#x5vHIZfeWnBoZ>`$QwGO_>Qxh+owW;}0@_F{2Y*L>+yW z@1091?uB&}w_&If+JgAjsWc+5ItAsZx_w9W|DTK{jcXp|^!|&K>8}%0=Om5z-~cgW z=TYX6$0*?sRXqn?!xaN)uWHyB7)zou?@{!#7TJC+&+t#j$Tn>SMNj*R`0rmMWn;J( zrWmcd+b*rB?9L3*FU9^%{D+md86KHU{KP?|PyL39Yn@>19@S;_!sQyM|L>~W9%#gD z`LPm()@)6NC)!cO7S)M{&Qj2##ZjQwaaAa~I3~sDbk7hIdX2nE*babX ztM!yfAVRXN5sXiO4kr;$jlN*gY5YY$JBVonp1+d^j$>h)LcEDnwq%H%Cl*}PRMqqj+A^>(Su-XUqRYptMuvjz*l>wE8aDBF`Mh)*po0H zc#UP%u;peQ`QP;B14u}VE8JMc+)et6Wsv#nAy8 zFDTE;HW|=#K^}er47X%Itm2usWezTlG4IGx`02qMr}gav_BXYAbjRM(#ewwN9A5^WJj(Y4x3%^_`_ws`>JKG$xt+U(S7{RE-A zv?`N9vRi9~V?XBi+Vc0I;)qs%I6kMe37phi)M7b(xU98fG5xO9uL<_hAKIR(V7#Th zHWT1otvj}ind9_wE1{x5cU1<*H2w5>h`~j>{|4hcedZWYF43oc4WUbQ?`lA+^&>Sw zxkhi5jL#OmVYq14+_(Dq6bSpbu5OBC3Fj`rZgR6lYCl}@WVRfZ5B+V{vfg(( zmjVr)*FTMSm&rFFW1O5&$LT^cKYAUAKeQPf1g~o^_k*DY#_PQyd!6w;>%%q^yU~UD zo!N`-$vd89Pl05*XZrWx`@uW&Ss+h)7jVUgRveQZUUs4U-_)jT1>Jbvf(5!x()#o%lEOn$$Z^A7B7_ zQ(yluKI8QclVRZmeJ9IdqJE$jph^097xabR(f{=0TcFqc3$hpJiI_^83-x0=@mZuF zoC;}+^>xF+u|$`T;ImYJ{vMFKb?a}XN8DG`EU4^)7`ulzHxvtN|^-bmtz4<4A zZt1n@Ki<~cauEDeFDdc)OaGbP*u9Y6JqP?Fjou^idCfTcA`<$#v84~7F~%Xb?>CIW z`1#%(XRK%8zG+f) zTWNG|2Fg`N+YOMp#yA$jX;yQs(SUB>7sd-5-qssO>49%F9?k~xOXG`NKwlX@_6PrF z<7ZA|wi!Dgg%#Tku?8x38XY*h-DNbm2IL;2Z7(qFHF|FW^tI8F-okz({2Qz|XjI<^ zW>+X>wx6A@zwMAoG{MP ze>`P`2ZQpoF&;Z0%(F)S#`v5wytwzqJa0@%!RLa}5IgV8pN&P&L&`74l(W$At8w#b z#QkQ}l=%E^oZg8IjOG>NI|D+m8RyeL^M~;v{tJ$I!}ywg^i8AGIK%<6HbwKy#$ozYad5%+KgZzHVOWj=UIc9$X5(H_W!ops}W#)%i{Hg&UxJ z%k2CNNZvNnpJ)4X`B89+`mzn~S<&8F;sXPVPl zcV?O8c0k%3^R-lb=9+ytSAWm^H+|mu=Bu2weqcu50JOkt!oho;`P3jN`rLe$?R|r} zDgc?Gjpivj@0-lC+wu9zto$gjTg=S^0Btoh+aTAsn{#_Y#SZge20pvY9`AuCwLGv@${5Zs|a;0Q~VYN%=u(8%P|8q!L=W0ra?hDtcZh+RiLM7XS zW20+84!|#6yWDn)3ULYTle}Oy0NltN`)@Ybqz`3$4Aq!1$q+O^0!@^2PE0?|H$JUE` z@L6tcXGQ$fnzI?771m~Yk1MS&Oi-?}8aKpejddv%Qr23rZMgpOxixG#^nPKTOati# zYn2CjH(D(!1NoKp^|vev>oU8$ZPu^!8Ma#&yrk zdeG`hPw5-0J4^CAYY+$gL)NV4KzYP6xuSH`s)T7($UJ5}kPB;mwDuhW{|W1SHAJ4Y zT6BQy)7ISX_?)rIV2`DF&N{Uo{6ASA@>{`n5R^WA&t-C(g zYY({-Ihq}Ix2ulN5w}c%%%ko{OF-B$cW5!Q`$zZ8Quv&3_jw3boOCz%912gnJJ4S^ z|Kxak$9*eASLjdo+RhMj*L@bhdzts#2WCV4C{KJ(d|vf@ z`4c!^_k5fH%F&)Tp90BP&pTXl8|P`T3}W8$JX;Sc#(PQ~fRv9spN#{w#4{WJJjq<< zd72B-|MFbq2)o>Kmg@|kcmkNBnV)%5T%3Qc^vtC5vf4BJKJc&c^xlQfI?uD4!11|f zD;F;}c)sk8&qhzlM-cawr@<o%JMB;ZGjl z6(G-h{-k^Ks&~OkAYb!#;cpP5y=#)N{$Y;suH}NArnqW5FEnv=Z`%m(ru@3hUJoZ{Uv7wV^aTh0J7?A`nsKGVES?!#w>_bjL1 zGrj!}gJh1^_XRGa&iCd~U+8`By@9|k@Ge>knuT7U1x<^*AAW$(V(%zc#3kMX zEkL@|`%+~H{n-0JM?lNH$0YbZ^}64Op)0&NN{N#64qOXpmG?wN#I5m8IRWHa@A+>a z<#X?mE70(T_l?JZ+~D0;3doHiZ{?wow#nP+9vHv!E)~FT@zzWSwACB;4LEjq6aTK@Z$o<67rh^F4)BY& zzZ)c%yyG=Mzj=#y2XxsRN*fCBigzWQrmNl;xN`c3ciWF(yzc#fNc!^lny=@5iKdIR zXx)9^_x=TpvvYad%CjT-wvs@e?3k_|YZ2__#(c$0PZ={ty72zw0ab?p*?0m5xs!-R1h{ zw_t-^y(oX(fB zizp+Bbv^hdActJn(eX>1s~>&$39kANV1C&3G^JiiuFmg*JL1avoEj-9u7A;PeAIR9 z21a_^_4P3rrn>HW4P3gb`X78G8LoyiFwAm&`A2xmc5R}i;iPLgyOZ{n|bBTm;b$Dp56y)&s00<<}$QtsUDw1k=f_naE0 z!=S_I3FSJSPR4eS`%V+-8+hP!EeX1ZPAq!nE+qU!g?U= zbIQh9Hkxi(|HJ1x;FM0?wnt9yi(vTJX)5(H2c4u;tv+!Iu7SZ*C+8suhn#{o(bGEp zL7Di7Q*9fB&zv%ed+yXr=cuDj>)c>4=5)$Iui8%MDaR4l&3RM`Z|=_X>0vyaxBm;F zr}G!|Fka67^f2DeWt3|9I2Tc;*w^`O9-R6)2knGYf9JnuV!Q#)am(N((3zhA66E|5 z>V5oP>n~cmf}M+sKz2JXTm{A4C$a!ED?Bbk@sYxF1-1(5+zXa!%TG$_U?xlm+MCTclRV6tWOafkd$czkb$%xe!eh=klzkp|E|>sas`DSKVVCB-GYrnsoxSLEHN*M*Hh9T&-dY4m zmNPFBkDcwjvJrMCoVVfbw!`J5^V&=(PdR@>2}O=`{T3*5oh#46Tb^_BB)B>4eEti# z$#>2g1oDjYM_b^gz`585gDG@g^8!ebbC?yR*qK8I)g{iul$M-z{_H0pOPzNVgOoWR zG=rRT-q8!!<<2E^vg|nTJW9LKW#`MYK^{)|>TQs&DSK!k?Vf^{1+V3lgwHXG-YNgm zL2uubme&C3pYrqnpc|O-WFL@^rsVP^e$YLivW_nHk2BO7k4S+Gz5(_@jNxdIU5r!z10aH+GaVa8%GtOHejAH!0 z9^s=Il}jN!z;LXlDHF?Z)gW#hWArLWJfn#EONk8G56~qsE@D}5NntF>fbXM>DKd~$ z25&haX$;m=xXEPPpfx&+(Y6-8PcrUP^XC-f4=QN$7>WiA?KC4j2ZJeKlvBP}$oOvw zge8pE9e$9WWeC?H#5socA-t6{#;TyKWRw>|cY%?V4vR|+uL9^UGeW2vag~uqEA}-; zA=QGljF;%muVc)hJgAbriF1S6uMT%r|Gn7 zw=q^y0@TjXeh=UG7)l199gNkfz;rTfVIU6~Pk(~bF2-IraNUfOyD;csRDBKKy^I%T z!Jv;}qrIh{A^ac4G{CrC1IQqQMg6cRjIE@5%1Ft9mm$V?bhI_hn7fJ2-$oc2RChgN z%%dXZIb#nC(4EZpXuWb{TD}BvXRe_Bg$FZ_3C@!lL5J90%s(Pv;LUtJ0Gtm~xEeZt zW;!Lf0nCc`!38p9*&snorw4e>UCc8yH-ni$??Skn8I9`z4wpU5c|Sq9kEuI=k%lrq z)Ik}>d~Fw?;ml@Fa1l&@+5{t+lAi&IV&2|{xY5j)(!m{II)2CV#xgw_Kptd1;Nb}m zG0PXhAdb1A4qQBQ98LcO<}xY}4>M=c7juMpcNQRyWab(VrD+A`6bL!D!fcg13vzveg)N74zT+&{Z>Uq(FCt zd3Fixt};*Q!Chl+rsmCcrk%RMHB85jUjVITJ}Sfz>zErpf_*)6raMRjGmci6M&^Yv zSlnU;)B4)P?A?q=x0&xa!Qc+_+-3~zF7vz(NGmg#GVwO%V+}|-)_1QV1U~*E-&S({AR`RdCwF45oHKFLTEX`0iu&Tn6c9ZluI`fO!yq zfZyd2^GPCvkC{_hKt5$|4}tj*b36X9j>|Cf=_GI?Oy6=KpE2ub`afsJ+Ay?H<{Ij; zjWL((fVn$s^c>=OuzWwKfS#=L)avtMjqL{UW+^gZ@5B0R28QU%dO{zfA1mMvbb%~p zG~5KS*wbORi#0(AE|?{y4#{rT$MkXSVU>RYWC&~EU68%3Rc$a2V?F;Kg9&H-s)Ahv zYb*Zds!Jqm;xp?1MX}oc@8pA3n+atM>t|Yo_OtS~19On|Q55VCv6j36T^x(S2N%y; zK|S0AR_^;qcX0WcFhPQ0ibsF~xRw`XCILUf&63=vsHP!(xhxOtgK<2U}&k#P3 zRZ$MzX_nU^=n7aXDK9T%<;?+C#5xlIQq20z2R=(!lV>3OSyneKexsKg|A?JXop25>$iN2?E-865^xt;FH=fT#hTBB@DfXK0pv34@;w+_Ww~=Oifb%C zAt2XT7io{HVF?BytYzt_uB~I4Xoa}Jdbky%xXHRj3q>RA>|r2pv3{ic22BpuB1+b7 zv$%A9R`pwXK``VVov*$ZAqKp*yOYAyP*U%mp)kNw@JK>D-29VcKIz%Ka&(m?jat*{7U zCwvV1U2FlpkHKsXT};}|zD1SR9`?N#p$lQR(8Ykg?AZTczK{LpQw%1QT`~)hFm@JA zqj0vBGR7!&7ah7qv%|kf_yg>Xd%(rAJ=eqFAbUqW<)4SxZPNgaV^3>@GM;@W9Kri2RBf2U7yv&|O6QP>@)onnpuqPjY@;X}{0#d^s7Xw`_JNi$A zsADgsR^JWw2h=IN$qsrSPgu{MHx5o4*sec;G_pUYLgp5Gv=*aiVo#v8;Ti z?HLU2vcC@n*UU~YLIg((dkQsUTG{WW!lI4soCf=LcDp~gdu%gRM;+|tHpJ~@+r_ZI z&+cyo7@F5Jdt#U*fVPE?V_RrW;f5l*)vnRZPfsV4D(ThCB zeh>q1J2?%n1L?*|dI=DBPSmUL;=wV~fs7}ofch<79Qx_Hi#O+1GdLg49Qr1GIZ^Z; z`*9o||H9s%6HiUa0FLQ63-U26JKq;CnY`<==3#htp11FhV%l zYeDvM`o98lA7}bDKteeww;&ATyh~qbIOoqfAW@tjKLLs66qA=24(?Q8k>?~kssTN~ zsV;=mSk7zIr;X#>+6ZMl=lwfyn#h?p4FgW%oTB!B3g<(r;E!_nN${4+>39diG>)7; z?sSen&D#vlqQ$Vw=3HEgM>@fo=MCLS&a4Fxp5pwr1LirLwbXUV<$N)V^3QzEaazL9 zaE{U)y#mf3RKgT;W_|}~5ofspA&NPVshwBK$)`oEj5CACdCvGqAS*b#sC=*FeEL3+ z7dRgjfL!E6Y=(IiM@m(5HRs?da921x?}EF^k&FX(jdORD?mt}ToY@A88qSk)gsA0A z?FCoI>92?H8ypTD2HfNXMS#?E-0ET9z&S=QR3pc=1mqTH|8XFjILcKZw>iaBWZmJc z&jq>5xh#XQm2+kQuG=^>)DX6FtWhBMIBDs$|8;QoQ%k6mql*LdA!nQ&57WijDTJ__ zvpx)@hohh>rI!;w0Uu%?Cxsf>{Tx@?g$FpHlrufzq>VxNnA1NK$U)9D{8<8*C!Eb` z&^_h+KqpT_oVR-c8RisHzC6O&NK3xs8RrN!yPk7Ose`?f`yuUkZrrFTuy^O;hn#qy zxm(tNcyeE$&De|k&vJ0S-2PyM_v5a71ww!BYc&4?xYv~M9mqZG3SAI)^geXExGSix z2ad03im(89URn=!Nq z?(hEr8Obf9j4_6r8VlWi?f@OE9N^BUj5C%SOyLi5&rFB#5SK|=a02(YH(`F5yMoSx z61hs+#*(;4)gVW>4$nTgN#=5DFsKynYf^AWxzT(;k8#gXDSn)Ll!~)d?vHB_B8^+; z30*q(`%Vl$gIoJGAer0*4oDXF!65|9=GuP;Il(>dkHO?{Q>llV%l(52#(Xa0PuQK| zZo3Mf1zh|WgYZ_!eK8OAMcfZJ0#nR&rpZ~tE&T`q&vG{w!oHOIDI3BvZfp-A=eR>_ zK+3tlP-%LeyO>&a72FoOa#P8@Qh^W`xNeUjyvP+%=c0=H?*kyKxl-EwuW%O+0C}C8 z7DIVT4R=B~*jnyj4oDq$b~}VOxb|9vxXFE|38bDYU_jWw-Pi!GmAiWf+_Z6BLSWF& z{gevqdtCZqvP%c|O=raI0Q-J&3#+6U&l zct3oLNWr`zZ;;)*CuxYZhxaCxJ|Vo>9zgEpJt@LRvX8fHFE~diFOiNkB6wMcfr;d; ze*zN4OWOeZXx?wH0u#ey#3Isu-g>&|a)7sxreQ3PcMjwrZyV)^hj?#3f?XVMH9bT; z??dWGB=9`e!R|0G*Be|SPe)r$67NnV#+1Ta;057P2QQckxMRHF$@rj-^8%Jan#zmi zgQW39bhMDp>(Ik6gU6M^Fq@~Lt?mTRDgrsl>zR!Zr+BW>7+MbR*%0h(wd*oV^Ae=hS!r1p9Q=(--NJ`=cs%UZi;y0{y>OgUdmH=E8$tFEIP}3`V_iS zUMTgH%6MW{8nqQ_cyq6U z)bjGOFqk@?mj~=_@W!YXzRCO5F&U$&=LxeBuz|OoFpa#}Sdd#hpKA!%#B1n-x7)lw zs6M~LyKxV~yS$fkL7I81z5}v__l$Ojc3#zfM7qc0Q7PTQ+xiQ*PF@)uX5Z(vtOfD` zudWo%9`fqH0oTR*Yq0}vx_O1m!S?W0)9%vC6VrvTKHem{71z&eSq$L-Z&519BcA(S z_Wg&v*e}V!Y3JX-Wu3c`dZ`kMX*x_~R+n4CR{>U>C;EV!=x|fBjsL2>x{$kdgd?@vw{H&!!hKnty8w z{zQjM4F7GaE%)&6Mk|E6HpYVaxJpLDSPwg~6u@2$$ z`7^IWc!vMC1tTorbML};AwQflk|O@wG|*!Hc)E8|!jGN|c{r|1ed!ReYlX}R*3NeRKQBXg zk3T?9*uih1{jZa+q}lY4FZc#NyZF!F1lP^4cSHc%!=J!`w_g5jYDM?)2amw8pPxSV0|f{FL);)i=of(O7A$mw?>&NgDj`AyRg^sJ6~xe) z={|vylJ`)-l~#BO6MT|G=g;ASK6;@d1W(2R8Y!4x2rf#nl)lPn!D*TmF@pVF5bhT& zpq|nJK^NUQiWS^^0$rRStp;4YAnF!Kg5YaEKn@F%K1aYr!6P~vNfP|k2-imh^St3R zS>Q@X#VLYjlxhx_qk_Mv$~h+R+XDOJg7>NIn<^-$c5|Ab_&6-m1#{@!Ekp2eEWBk4 zQeTGdgkT))6(@hFc*z&s`2^-?1b?4` zd4XVQ7=(^O!MZ^NEE2T*i$N6&P7Fa>BKUv~3C;=@%i!jmpky(0<$|sAK+X$1MQ~Fg z_?cGnO2NWkKrRTbOoG#kf}68IssyX3`Fu$b`8B*;7Nk@DSuH3#2;mh$AEkO%1s8om zt~mrz-N0NI;7<%-k_gJE(^D(x6C*^OAn7P9ZU}gE&ETe>k1ED`!Af5s8w8ACAR7fU zXq~zx$nyr*BzWU17~B@5r2%qB@I7UdcLm#N$7&WZwt}<>=2DxvRnR~;0@?(Q^&DV2 z1UHQc*eS>qKzUzKL_6&R!L}(N4+RsyhhdlC%c%&_EfCTfLyzF2L4@cPNRXNY$Ya5b8h9BLOrxdni2x6e86#Nw5_Cg?GzTRp!-8M`2j3%t z&vrrjOwd5L3!e*mLg8jqP%{U@F~NCiB<>VWT>yJG;k7zI+=Um%;M7AHJr6ohq4g~g zFQJS+N^jvVN^O0FA@q&-3lr&m3J`Am6Xt=!we(Z5AYt__2c)}%pS}XaU}2L#$Znx~ zKYZ^IHhm0Ch_LuQSnL%x(J|mY;aeYpgbF*3LKr6ePYYzYa5p8j5yC~3=SK>=o?%Q; z!WEApj22Ga4q=Qik(Q19!X1GyKOmez6E0S`YZdih4hp}gHR+J>{!|PmPPir&Bwl#v z57;LNCn>=l7CvIbK2f;(5s*p3%|F8ah|uFPMv*N1h$h}K;lFpFJ1%UoX!dp{{mMke1VqNGU1O@tvk*M572G)a-m=~Fz1DTvVo}(MlFNyN}>Hja2JI2 z8hE=TYzzVNvM`30q-vp^x(ru@>q0=T3L8(u{F<=!ZRoBG$5+CjMz}K=2DQRsdXMXb zvV{=d5H6<4d{a1Z7Np)GJm&&wgHRg)Xru7nM|iYb!e38eY)!%q`4HX~+Q$KUNB9#Z zwReT?w5v4>yQTx#BK-C%Kw5>36Ci984lDxKE{s_TgL}g3d_X#c8{b6uPT`hdK<*1w zBOniiKb6ASL!sltQ9!$d{{;iuE4;`<+&&@WIV}2xH>q1bAWWrs@JRS7o$Ndo-lk5? zpztzF8TV9p{YOBCgpo7B4GZfRLN_AJrF8$9P`?Ml=R!B?0FDY59YowQVfUYK z<}Ui5V-y$S1=MQ~6W#fO z>c4PNxCRyxqJUu7M~c=`-!@8g@-yh7MO*%cVT|aXAdGOosES$-2SkIkfyIi}(mk7l zqU}53?U3jmt@&}H>S74vMQrNwC5pHcflLxLro-70(OoV+r)1IJQV3H-+#jg_a#U3G z7o^8T#UFqi7X{G|Fj7UaU&3jcD2cMsbdl3OIL#2XEQXs*(E@6DWQm@>4`H?_Xg7o> zL^Ef=AV)MS8oFFjH5hqwnsb zXpow2Rib^}AeTfIs*Ep-QnH|{7EPjV$`w)UPLQjjadhWF>O{q6 za5qH%&}HhIA|pkr7u{~ahtME8X@g;-sPh2=-V#kHgRn{T+BLYjEt)(XA?}Dmc@W+e zy+Ny9vnW*!WQ(YgDxg-;XA^*I6NL-|(k}YN8S(BpM1B5{c8DI%M5IoUj=Bu@MZ4&W zeIPnbXB!Vizb=BXOXT${xNgx0bO_TUstAOAuV~%7Abp|&Izs9f^-|(EAo_eekdH*0 z>HOib=sx>v7M(4GZbanxjuOacqU>QPpNm#}j!2`T&6FC9iSp>( z*(shU0K`qqrP{+?Y@zmmhd7OnO+3ZdW`cN$Z&3Q{E&fFhh>tj%ihf_Qb`g+%;-BeM zz+c=;+h>4y6B}tW4i$eC24R@^Ys!hk#kzkHFiJd)_K|3DV=jEhh%3&5>=zeOQ|5r!O$SJ< z_&l`*4~oY>0y!kEYoYxwPONkSG+yl31K$Z^$vrqdEIw8ZVWM~@Eze2fMOQJVBjUXG z5F%MT@)_(?#FM`QcU1fb4f~jwy$#Nei+7~JJXIVu0%vLBNx2ZFi$AJ{d4~AuDs1`1G3~m&JAT#a4^wroiBe zIBFe`SHi0H@2bRL=ZE@dkAa}(7(DHs)97k_(v)FkN9=k=n>m86*F>?-_wu!&w!LD7L z7755bap^F09pYtv&~=K}&?xSUZM4-r5X&aO*+cPbS7Fd4{`Fmi?RJP)`~t%s@u?PI zdc`%AkM)V)qZ@Vo;t=|{2gEzK!0?gSeH6YQiyLU(4~iF$fjkk<+6?4V@e9=$?~r&h zB~ruUjdUJ1BF=vuKA(x#(|Oi&v4-B`os#+gB7&P_w=Z0~OB^HgK6^-(pM#;NoomfOkUZJ-nTCylIaZy zktjKo0%VdThR$$~NVZc0GFg(6jlmp~oSIEZ@o~xXQ?N*vY}y26hGb(YpxF}6Rp?Gg zzNcPgfnwC1wA>_XUY;0K$usH(tXi zswA&am2yc^wi&|9l7n8=^eJ%DE@{0F={?E55J2xsTHXZrK=OSRe0NLw(!ljd z7E^K7FWKjT!3;>eg&>2H33p-sM56G4Zdk%R4KgALrKS6sq>_@B=MvUzAV(!F|H0Xq zS9yru5c`S6iGKLO5H`X$}^ z^OJJuBCo&n{Z4#%0a7O2MF^Az7h<46(tq+{uuB^KBe-CxKlKH6OIdWKV2^Yc7X~5H z`&ls9>yUOf1G7&WPyN$SDgEt7mk6okEhr~KYkLxhd{nG7J z{~eI7HNYTN+VT#N2c;WmYd$26p!*eZQUiTJ@zUO}!6it&U78X4d32v7O}btSXu9+t0U#OD7d`+aPuiRca$0)$E_C_Q&&R{y zj5KHv&r~4Yd>qI^>EwfmTOgz$!R!4r77Db>>@t$JzXQ5ZBx&C~E9G)fl@LU>F1@mcD>G)YtFHMuPf zr1nv>G>MvSEz)61JX@vjP%Ydh9hVEzE)AjY@SgNIHR3y@&9s41->&VL2du($w=9MZdIh0|q)EeK~;s{?DK^>pYZCr1}5B+f%8H zPIQN)PLxCpOQVHwGa~K(8049B(icEJmk!V^f}OJ2bWG$XdrHfsyDV-sgdVc@9YA`@ z476N%$v*lCI&YbnHZ>pFOcfyhvLSas0%Vq8nty?^l{zScWM6H8a+j=&vYlX=^iz=C zGTB84_sFij0XO?(?Q}aNRQAq6j4(_#j~bWZG7su_M#x?jLKrFQE`Tsf_DwFrN6XGH z#0U?_)=fpgSeXZPMGngT`VEjnGXHrnaKy>1l4jMHc!g?2gLj#X@*YwjvG4A zVQ0zW{sqaFZ8-*VLiQh}A}1ZPYAv9rWDhIA=E&@O!R5;ScnZTjS$8a;r)7OR5inmi z!UlIn_KXgc3uG(lz_C!qq!qkGR@{QopOtNo0Rpz-L5H`y689?5W z{YceKlk5uzodw;NEvkd^j;x!y1$SkuJ7L%?TSy;5i>&E3xOUlQGm!UWvB9wKkj*o*v46qawCTc4iJpx9smvq3exeWgyHE_si0nHmu%F3{wBbINU81<7 zvQM)h9Fs-Gf^(O@91lAWIm$511Nk-jV7=t0Y3cTsFQ<~&M;<4HxvzZndOH8}le4IK z7AV&wK^Y|9M6-F9Ji86{!SbF=JkxG@4ZWRvpEyaQQR= zLPW^#PlG|EeC1m(kCK<4hAvv3+YIvMt~4|!s|*X4gwpQ}cGjgBvB<%|e8tCJt_1y?WMO}j&b zd_w~48s&N4!}Trs&T8!y0ji`$%`HjihVIVsdy|hugDe9=->#k^A31=RPC~8o7DuTKJ@lu>9 z2Is9AbS-F74Wi8G51eELKVD!00~p9qg%$|iofWTDnjuFwWJ~y_0)@sQjAUm ziB?Q+q5LyO@ek#%`xVt4usEQ|lK~p5xJk=aoZ?m5dEym8{{u->)P4+aNs4WBT69FQ zj`p!+#dNAmjw$@jc!=YQ*V{1qbVck$m}e-8E<=~Cu;;bOnlG8hxR{Kb+40 zN)#6*Fg&Z6M4jbx3f7B=RIZ3V4#V?`)pMY$P>iF_RHb5x8M+IK6%%29Q4viaewE_U z0dSWTCtIPrtax)Hyi_YZDI2|_2>lEJuPPkdfxM>JLwD(}D?WJ_T#e!_dOaLB6y>x) z-c)=|n0m$4@9-ToD2C}WPm>~N2e{h`mKO}~C??@;ak;DTrX!tZMbbTtsYUT2J$9?2 z?PHKO#aDj;*{<-L3dlXh#lH}uLs3H0zf*C9%Fp|XOVn_Ap!nJ!@g6!9VebLcrMR>L z(r!fw-L>pd6j@>4t1wYFwNJ4@hPeHT!P`I%C{79>e582ecQ}2l7#fDbQ^h%2l7kT!ylXE-z#%zog_aOR1()kZk318MqV5L284Z zRC1}XKBZhq>0F+YM=k8r%Hy=4<|{S6wEvw^KB5aZ1PK<=ESebYR zPD_<9^1+oUM|%{q26IjM z;w;!*R}RzhMUB$_B_K`8g*$2f-B#Z4#-N&&-rFH&2dSUmr+oMmoIX-63xw{mlD`*T29?uhK=(wskrMQ$%JWp#3@M$+^{~>H z3*?CMvpL|NDQhBW|9h^Cp$R{#-25DI$CRrnv)HNfJ_XKA)zJs2yXqRf&mJnz2-th7 zwv2&zsqTIS-`=VV)E4wnJ>|f_SG6J;IzLr#12})x*OasbsHW1s8>pIn9l9V@r3M4t zrP`DOb4Rc$k6yjqsy);W-J|-7cEu1?atEM$Rm=B+>{FelBlA#I16_>^Q(e9YE?l*l z(v1k!>vTvRshTVTGD`KuHjrr5^r!HBK(*!ykg=*B`mNtVRpDI-52?oWz#vZ5x)UVc zp{n`>&zqpC{}j-}s?D|F5>>M+VUeT~e~pnIQEh$&&}7xh&tadU%I*YrRCRqekjGTI zb_6`GlCFg?RkiOIaA~UBMX*a(<&T2PP#ssoE>rc0u2*EK{D{j|eMP;|6Dr3Ty`Cpk zH>cszPN}+^fXPt>d;?*wYR8*^=BrXKLw81%OI@!5RbMRP7OK9u4PA*!OueYHsv}GU zELBbV0bH4iN0aNE>gIPqmaAq_y?S1it%5;?O7;%oR;oO8fLu^5bgf{fL5ti zDuB79TFi#G%c{R9d8t+jIe=VIMLh<&s`?2Zrpq-|$FCUZbrq9Z7Bwm#IfS*U*mq%9 zr&_-sx*MtsIUqMxRW!BhRTJsIcRnuwl8c}6ZNj$2$T8!{xszvS4?Ns~IH{zzA zlmT;h^=xWOc&NA2EdWooq#vX3QXA1?!SBD-0n{$@Q6F;!)K~ohb<+LR3#gj(SNlr= z4N$kQf-q3+pab+E^%Uy+>{92Qgh8*>d<)zk)a-@EizMWq~$qF9Yl#^zIy%+L^`7$@`uj?br&U`g=$|{ zkRo+v29U+->B)eUI@BFM0aK<9%Y@T&>Unh-aJkz53kc7vrBt_8sOQqetyI5Fw~j8T zy9shhJ>3d}%j&7A2!B7Y0a)zze*`)gStBi$R_o_t#Ec* zT|@^`&1%QTuY$Iy6Q#gBRL?(;5MAn(Cn4-sPhSgYkNS;W;Cj`i3&HiN(_RJgk=l#8 zp^w!$n-F49eS@00PtTkIi#jsjkg194UD_w1SrqlWG7*mgY2Ix+Wd>t@u8Xk2%+%=17_43e+K8Maz^MVROFHLS1BKc~*rFr0|2}uI+ z*Ic8-BtWx??zjYMCQ}y^|GV2h{`tPX!vRAV! zACdNH?zci3s_8rnVT5M>Yz#3{Q~n3+qckgNxs29KTo2zdn!6n6_G{{nfE>^?Q(+#f zDRqP0LCrJklyQG|kW!xJlQzc7e;#^ajFPrl#ElNS5ZACxqD= zE`4ezG&^WL&(UO129>J`con)l&2lOcPivOFj|lmi1vm2(Y zy(!Y{_z+_%);y$LyhIaFh)8EOds?9@)qEZaU75z&3Es|YhN(8J(0EWTUa9%R2gnN= zIhA7G_P+%q(;rw2pHVb@aWQEljbk#2j144q~yO@GoFq%TQnbk24t(| zBI(*RE2&^?*WB!Z?w)2Y4YXG?^Dcya4h@^mHu^Qo>tQjV@uS0#M;c#RH6LqUptNpK zv(yEUCz|O+uz#wV9ttv~Nije-tZAA8ZzGz{BG`>;jx5HPHl{g4ALUN%XET6w)3)7( z&|Q0X5|AEREfp)C+Qpl}d1)PQyb7qdwvB3dAFcOvjKWuY@h=Gdv;lM&8L0iV8_*za z_&o&Nr5#{G7_1GGf!nQ}Lchb?qfMi=H$>Yy6Lx#GH|Ueyr+w{xAValT)XWLf8mNOF zu02LMQvE<&8u1|;G`DAoS45~NJ~E7eoy zv~N)E2Apqrgjq>_VwB;d%!hl z#gtGrY8$Cuy`|kjZR#eifqKZdwZ4ns?2gv&Ds*?X-|vI7R_(Trplj1^!oKNnY1e*7 z9f5n=yf7#`w23sSJGC#-#J#VTU&nwSXvfn5>qG74{qWYMJ^308y0wp}3hmK0d;(;z z)+qpXecIK7FzDB6BoGd0+y6$~N7`@tKptx+(PuHJb!~_4iT01L;KebleefI>Bif}B z4C&QE|6ZXVt*MO}Bx{NO#?^4cLdvedg;C! z0@7P|?F$Hfbcqu%LSNl-Dv3gNH4T`(I`%zS?9=5@ni8t}<|Mc<-5NTs3D@nXs{s)@S4ztwbua%0VU+Ig z@gUK<8DBvdqx+2B_5He6(QbA*pi6rNBvv;{cM%Ti9KC^H59x$U;X6+E9hIN)y6}Ur zNYMS;5ALvT1+7epx{sY9Owt8(;VDvd9xs3#)vZ#&%`sgit=Y$Q%d=sSsvDwNk*1sR zG7Qpn!?agq=#tNZ%hWv{2S}FAQiP#p>-3Iyp**2mK!x8)-7Ts_PU*5}bIZ|fqgpLj zS274)o-XAkkf(K$F_3(niV6EOx`ac}73i*g4pOK~q(!Jiw~W%Ov%1|(jG|O$cnW7_ zItLvUoYUE;J}B1>*22qq-E1ERq!qd!sCQ7Qn?%1@x}aOq1veLU*YaRkrCUosF1n-( zrJU=sPEUJlweIM02(ReoO$B#d_kJEC)#zN0!k|`npOV=+UAPB?H+1-qelTNn2Y!Wl zy>8M&#BI>c_P{6_b+@Z%{@v0&q9nXYw`&%lw{`fBmN8{?pX~#=tJ_N_V9mM`Dw|t$ zAJIL%cHNvD=MZfUi z-mdChlOepOe-MvhU)O)|FTB*~=h9TE)wfbkTc@8ummhBE-=zEPH}zc(D*Eg7!_;?e z(7#6YRHMF|wvJo+C39fWq(5~Iy4!k*KP;N{Z%&4=ML+i+_-@tzZ~^9R`gN3;wCi(d za@^DZ;sQvAK7cawPJPSY;O^_s`N7Kry@9rqhkF0b;JWl%SJ3?H*8lxBpgsC~Q}MjL z`gOD*_vz>V38($~=X5oEK)-=L%SZaRk0S14z2b8qpXvjf;cZCYaRl73KI=Bfi2m3< z_ChRp}ZWdmtly0vE*y`i7u-9 z8NC1RMKm=01;YSCb`in{8Wg8Mf(#n!lQfaP-01ZvHM};6@MVS~s=Ch^4%0K08}`y^UZvqYrQ{b3fvZ3+8Tvnhm&*p> zLU^e*B#(pL6~kj%UavX~14}@!86-c$&2>ZmOoXU0Bv*l}H8gg^Tb<#>mk{uV;Xi7< z-!vSi+1O|}LcQc$hV4}2H5u?HZ}5^D8YTjA$I$r+BHcAaw*uL0c+UV`i(%DOkXD29 zI}o-R^wh&@H#pMfgS}_iTn=*I@KPW!4-6GE!96t0orkzxhBTa|Q1LI*_5DllEM)ernco}cagwWfVNxg3$qn>tnUt>oFgnq`J z6+rqMKW_#XVDvf$5@>uD1)o7iw_jks%UFul*Cp7v_ctJS8w=w=_87l<8(u<;@4w{0 zxc3^lSAp4QoO}lMp~e&}f-Ygk59uQfH!7L|jW90x4UkA<7d3TajGhX(*>9|01Kk0m zex02* zVf zaXNHYjLbHeUo~nd-@aztPW`6q#)Gul)fkWULRf1|9S1u{o$=6zpf`;2GK9EkyiE&h zy;1WixCY~Ic33nT=T8H5f_MgT^Ce;GP)6JmBT2F@k!W zLq@|L7z`WV;D8%3{*r|8J~O&chQV{A<0X2LM~#OlGZ{0MQM$6zoin)lg0wV9KRUEzmTR zy3RqSaWr9fnV5R$f=z9XXh3(H?AxH+W4bgM(hyVhc96ZMP%g+mQwMROrZ2>RM3{Ut z5irv9*6$!uruQbmceLpeg^w{6(JQduq@!i>fXO-@kz!5%{Q&NuNj(*T4w-7`EG5pw zTLLcLBne^Gc){)(ygOOUH3J>AQ{W^yh8cil9d zgU7Bhm8HW=t;zKXxH?n(KN!Ug)0{LQZ<-EHgs$EcOS7@TwDt%hI2ui(6XE-oNk&uc zj%i63q<2ksKZ9YjsfJoLEv5x+;95eMOo|w8Rd3fqDh4Dd$OtUiq9X4fZK}JmO zv_3yGS!mCAZmL}i!%>rfcKW=PS2>gc=JF;e1I^!2zbVMF_W;Q? zyHS0gXWld&!qeuflnm#aUCkh8%msAVTwwmz3iCp9O%xzS=DaVUD>mECf|QuQ{};lu z=1E_{OQ|{MJvx6VGh6?K#W`~{_9K^a^9R(5t~5V#f$)O)Lk-4#$^6rO*k3k}#bCVE z=3Xg~SIot~LwD6Y_$|0=W&@QO*UeefuBtJ=dk&=5+?fGVXWso8%x{doOJbpN`+oX10?Msvvp4C62|Y$9@dRJ#!nKY1}to-U9A{Ig>K_hvu*T0;J2_Y=*GcJcn); zIQq<=QE#W;e3_bk17^WRcza}4%>{XE4m*Ky51RK+0QbZ^pSrkD&3y|%hRhZFU@&a{ zWECJI<}$jQ_RKtEFSzGse`gqsntO4==`v=X+k}Dcw3ugrbF+LwU$(nt&Ta@j9G3Dm zU_C9v(?Pr}KhhlYwuCRlC*)&!Gbr7CEgt$Lb9dK69y@k zY^sxwT57(5?wG~@5s=3%2}7_;wdg1lO0%qr12WxWphP#r(&dPPMW*Ga@1V@Gge(Gg z((?9;z?`zoA~!jfekwC^E#Fg9HP14Uevfn7@-`hd=Ub}WAv|MQvjwEUvY%>?Ld(l^ zW?W=RSP!4YmI(oHR$}pSf|s)vC7pwpS~4kLF0;IwM*H7+i%$xMSYa8-g+-<1dn)HH zSXPe%^rGdRLm)n*ZER5og zrMDNlyO!B2plh})rQS@7#TEugt7XSR2-_^Z)E;lQtfTMlp5@K0fOJ?M{DPr%TAVik z*>9Oo8Rvjy>q3x6mUDDA_}G$sZ5-y`pk>(@q)#j-ZouNHC4&e1A&ZG__6=LUr7LbD zmLHQrMlF3|(2ZI8=$6M$>!J-1x>@(rymhxm55d608h#$mJgqU*XZEu0^aSy>IS%rJn-}Z)`eBDa|Bu=Y%mP6&Ub@ymo@bbSOi;ZC>IE^{zM&@y;c*ot@c^B zP5}wE{*QqWVb-bC1kMgv z1F4XSwaW594mzwoDZm`Eo?#(wob_5Fpz+qq!{8FEo>WR4wqBq%TcWk%O9+#!dHcW} zu}-)R`(*3xe2^6Dg+&k^wN73El4{-SjlrZ@JLwu)ruAqco;S-nfxfhp)^X2aaLW3M z7{VN@Bb;8ZTx;SpjH1N4Jr9Owt$&?G+)`_JGy;}ceO`d!Icpy6C*{^FTS3lSU)c}4 z3hPjP_1jNi{=iy9snbKNivo6C)^Ehnbz3(!(D{3hb>cmY z;;FS`708hF*WdAk!`6?Bpc}DHwgCFfs(A?V-1^le_#U--&IDx4s$2nxyKO0DqaL=% zsqpP-i;IRAFPonP2Hv(J>TCPh%=2OAZ<|c7Y=F&^ZjJ=nh9c(x z+qCatgc&yPhu|`8yD4s#O+b}#wr&0c=o}|(>9pRQv}JvR@TY8da)HUQ75@ieuI&Il zQ=aV|T7*v9wou8IZ*!);z!}>obpNHm_V=r>E42Ahid$scO_fBkZR#K3N^PIeXHjM| zzXG4dq9dE`~wqZAlivw6G-gX=cGH=wJr`O3i6+TM%7(CTa_sVj2B z_V7n=H*M!=9yHqS{|@9Wo8#SkP&U~nzXIiL+X$Vi-?6<;cjNBbnhODKwq4l-VT-Mt z>|1RM>HMM17D?%PyRFa@k?z^PDuJ-WR#ySLPTS3k7}I^*(UagF*j|o;UAL{`Z;&2a z-xomk+KNg+`fM*bXanlEJ*N78z*a-s(j!~nDF`3iYABN$wB_D`n7vrjDq=Wg%s2Ipb#jmKkq+8j3q(&p!#JkG=XPh_5|Uh)46YPa@)P_ocJ$0Q>nmkU;xnI?xKTKc=E#mwg4@ z;t96jv_TkR-~T(fz4liEF_?Y!WwZ)}+82dE7iRaS`&8lf4Elf~>`BjH9%+B)2;IMq zvY%}NCffenW?*9M-=2e;{q~Q`AUtS4cN-Rm?52GX#@RP0!NuDvKE^;3>=Cpg9=0z% zgh+|@yVUATvR`xq@`(K*WxC1s!#Y4x?1Q&pchtUe3+z(u>?Uw&_N!PQ@%KONKTsz= z!yZI6UZ%aDTC7?23nmOE+y3W7cspUg)d}HAd&L%zQ}*06Aam?n8sR3_{(KEWBMVxMBaG6_A_u_U*8*x8J=F(qPY}m8sF5Tmo;m?Ej;_ zLX*AmeHh%f3n@{)W8ZcKy1VulsfFEaU%CVaE%sL~AwsLe{vs8QZT2*}$MX>W>Ja2y%ZhRRIzk>KNUaSDdpYakkzXBM4=Ys??UZdJ2h|xF-!(c}7Adn%9 zpJQPk%J}LX==L-I?MH|R#_XR!A{jr;hA@iJ{S%%yhB5pT3=T4KtMO#93;|`xaf}H8`Lr$(s5}Wqnk3Q2F7{hMfS<(8QybY zc!9BsR?SAnOSHZ=G4fY{Yi4YG35FLL$7qGQ#F)|oa-HG-8{Bj-9%zB=WEg!B;s&F1 z7QA#bhIT-Bi;+1FNH60Tx_jTp7^iEI{S5DDnBQZ(`4PwfV+ZZG_Cba>-68DT8{7-W?34s{U67@upv@_cX)mKfDv^2G3r>@m&%K3!hnPNrfF?6t zs2O{hImrRS6z2465T-JdzJV}}={gE7of#Ma?g;bdDv%83f;|vsGJo;In6j7$TS2m! zP3sUThZ#T@<8zsR&PDh<=Dqtc$Y*Y|^FRxjcj=Izkogm3{YRNCpJPnNm|6p%MN9_O zVa3c{uR~bE+o?-r`gZWwJ&S>htR5SN(2egKn@(h%<%+AZ;>X>hAgVP4)cB*U6Gvlau zxWJ5g6^4z>qiG;b%+Cc(Qd4ICA_(_My}w8@nErD0K}7(UjW@cmYs?#FV+$<;(D`2sFm!)s#yY|FKfXF zh~1A>;|Qrg>%wYS1h87@h(D0E))^#-HHGrtVAiA!fP}Gjyb0goEcv@I+|Rm9$2AeG z!d?g?SrR88qgdA@5Jt0Zw_=0`SQQJQi(xIM?!-Zsd>*)1mgOS^ienvq9>{n*YdR$# z39JBWJ0-H#($$0{R{ACcJj9wsxotAb=VRy&vvhQCAcf^x2uM2XQ3`}dSg%m8FoRX_ z0)&~YV46l*tmkJTU^dG*04|5MB^bI~)+pryd933>(B-pQ>3pYvW%nC~n?lx`bc^*U zE4?2fj`PdoOuWQW){K=P$64lP_^x2>eG144mUj}kO4a~% zh^koo7lS*=`kp?-Q>>4&06EQ?_ziYvSl`mbJIfj}0$I%puwMhThV>;6q?W~}*;vQ= zDjOE(SPE*~)U!5z39f;4FCN@^*2ozkFR&g_ySR}xw;RGH*7#HSZf2dLGQWi-VS`*| z-J_fMtt=zeGi|I;N`Ko~#Wd_ItR7F0tE_u$nt#_=u@!K0o%O31NC#^nCBvPpU&=vl zu=alj=uOscS`)fhpF}{|&5BP!z+0>uF?6?CiO*p$J*=<4gZUlS(<4CMWraKg($D(o ze-Ped4b;G3fVGdh#)GW4`5;5AlwsQchFNV?sorP3@-CncSnH`1@Q}6kUkq)8Mi1#ec2Ns3UhE&Z;Jn$VWZ-<*n`qhc zW#`Zi;>Ui0p4Xr4^F4eAu@6%>HJDxdF?1p9pCt$%$~M#T9LD~DgQ119|D}tc``KAk z7Dcdwe}OKNok=N|J&Jut2R52r<_F9H_8VmwObpxUIVcaZ$Jb!ovFsSyYvS1DrGUh< zH8iOc*c$3JCbIqLyGmlKX^I|Vr)>lznLUj<7l+xYqwtc#jvGRRRQ4;6z@@QI&?lG9 z?xFihN9=5c3^ap%mg=HRb|%fS9CqX1z~r(E*F%@b<^;oAK0C|=T>(3RvXw&ibX3oi zkFt%lG96=2qK;(|``YL5Qp}#R9;Af5u^yu@Wv}=MV=80&hr?MpJB#|C$Jv3Aa!j2Ft|C#E~F!w zdUp3a@Y28@c^A6#?8mfoTwq60ZP&=&cpkzg_SytQXlB1h3F}4nhxIVH#2&NLQrgPi z&<4`RHoXjGJNx_pHVgI)Dn_reU8%u!jqOL7#dY>EI#cOj2UB^{$)1;i5I5LWltjFLZikyY>;$^)beCNd z4bsn+&@GXB>>ZQ~46(-^;R%P?J0HT$L-sJ00we5o%keOyY+RbfJYfG`3WzJ`S4s}u zIDOQmbLaFdfin-zO*c66<=!AljjWA(VQWiTTVW}`8*TI7|sF8WDauXgwXk4EXQpoFmarbCP?EsrygKz37r4Q zKoU9I++dN!37rb=5a+}*aFfiLPdV{nPQM>W3THj75UHF)%Q2WVPB}G?(>Y%Ap*zC) zQVL-f=Tk}^vN`YFz?gD4YC77;<@`1aLVF%(lLPGYImdl5?xUR5bWh?KXUUr&MV#@~ z5EgUZqZ+(~)5n5EDd!{FR*rLW+~B){vw>=d6P(GkAXjo;rtPze^XmsNILUcP_v+7Z zs@y=%avp4lu$q(oA|N%Kt#sw8*3MDsVOYoU4FPH3te_stdCmzJjOhZWiMlb39Myjp zb2;D2VbRRF5Cm^6obBI$T;|;JgF!1N9l6BhHjd&64B9!*eg*Cdr{o9du5(h3!LEbT zu?=xMIp24|^$pJDc95GK`?p#Qs*B@K1wuE+gYuMH9LG;!f19(Jfe<~ML23f`a^CtK z!amLwniY3ArffL9%PIT@q@PnqeervoCzSpUaE?*yeUP)c2f`taH5S}3C!Wq(?sFK_ z&wId`Sd5`PRWhDX$vixR=7sI4AEdM0&yz=%L%g z{q-@3GdGuyp}BCC^vUk!PNQGMmHYiuaBf@`{gt;nw{aD`cyOPmj*BOE>U+@b<339# zNnYHeAJ`%F<}Rhe#D{BN0DE8VBWmRPaj()7`g02&K^MSXO6Qh=+}SkoLb#Ec(1mhK z>0O3#e{2N_=lV1PvY-3s0t_vJyO?@2k=$E)j3SEbPzqr**I5GY0N49X1d8E49HIR4 zAXgxT(^zh|4@eyM{1@;R&kgGVCV?AoL!?CR>^&Go5?4*{;t)4L3@(}bDs`U@b6FKY zrf_%4!KHHjsIW-mPUV7Ra0PTOmB~$~%_)mpOMf1d&7DPk-W+b*pS1twa=-c*-txFp z-pAPTxfyg0SHNBM2Mi0jhw0GwDA)N3bjP@l={UTIE21pAn0xLJxDu|*bdXZ6p$U*O z?q^h6mUE}6Aw0pov38wiPq@jn zvrlj*QwH^vo3II^*u$IKfe6mLEc+K=U3ghXpxn!w`55-DJe~?p-FUShL+8$$@g;;F zyxNt3c=F1sVYrWXfO29l-pe#Aym|ZSt@-d$JRtPtWtSjs0I#$J$UvU%57-6qzD$Cb zVBTsKbRoR*?I5AN8CkUdh4Ge(fC=aA_#JNc^HS+Dc?56w9AF}O*C`i>;^j_27|lD= zh!6*OBNt#7!~27F;e)(Cq!7mP+};5sj`t581ts#70q~i`tEZIw5Kl+l?qpsyoq!$Y zg**k9!uwW6^DmY623`9} z=6O6sq%*v&wAY;Fjn9Cvns?I|q=xqi-5RRpWzyw}BC>wpmvtOs*@Ge-L-!uEq3 z%s+PkoC`mcDvG`Qr4pFC^HV&) zdGK|O2O@#0T)Kp=1awoifd;j8Ub3;6Okc|+;PS5d0!&mW_%R{&rB zU;mTOKLLv%{@24m2J;z|k%aKS;(!a~t7x?h<8v;73+I3NHjw-IuM;GKA4NURNdC^d za2Ca1)Q-_d^FMhL!UKFa>Zix>rxeltcaZ=0Y{ZS_e@ETWIQ|Y5?Bn?Z3XlZ;ir-;> zi2uK6K$7{D^b!yAL+Pk4g}>}&giqxU&VZLR{`WE9()sUh19yave-Iw?hrgVOdp+f!x%{ugfyv`HP~3d}03AFO@Xgd%E9C!5Wn>Y*k6JXv z{Ci>WUBZ`6hOU(V){7W#8ULsC5SH`n3P6tYudar!g73ZwE!oD zgS)}MOQ)_k`L9uK+r{7dCVb!KZ*zdN9{y6=GJ5&z_e0pnH+~DdJNybhT;Jsz={{pW zzl;xZ&(1$g`St+6^EI%8{6amrA^z3B;B=VZ;|Sq>{zp_gJ>aLj4*Q3E2OhW){)PrP zeZ)UZCvT7WlguEa{CGNe7~_|dvvGa|m6lKVuYLue6MSJabWiyyei+&w!Q>yHa~9YG zia=cj%fE)wO<>@Ha~IT8KIb9O_~0dY3Z^ZDw|#<1%^+R^7pjH51xGHyz(){v5fER2 zP!0n>!KX3|&0ioKLcjolJ{gce!5dU`gb1Fl0SOfxq75WWFrES~T<|}88VvUfCN9Ev zgy4r#7)A<4XF(Vxh?$Q_(Sj+S81MmsaUFCqfL=x0*_d5@q)i6 z1Ck(+QF)RmSf2u6l0dx?+#x|M&G2Nw-82L`ELcOYGDQ%mr}>vINc|P;5kU}L8_E!D z^FxSCLG3aKvjp|gfMg4<`$JeHh<^;OSnvkjCn*th(>2{vK^WDIWrEG$Ls%~8{1sk~ z3w{ZKutKl_UCqfS1ncS4r&4foD@c{V{VPCD3a0O;{qK~(kD3jq1p~C3o)LJbA?{hh z0wXZhf>=spYXm!~%%~MaRYO=O2)qb`a{|#igs&HT!3U&4(0&cN^8#0z4y^)@Dj2j0 z{-XAFyP)j{=&lI*=oZ{nfpag+uLDY#7H3=6b#dTZ66X`3`Y22K@IJn_XV3MxqKi{(i1)uY`+cYh`?bjLOc>A zQnvG0@Tn4zQNiMc(2WWDMXTxbFD6|SrY z(obk`1o0Pcy9lQN!Zdm%fkIv$%!7nW=~ygSc$IpaA;JzdbfLm_Hb|K8h8u+8LVW

!6b4a+8Y^sm1G+fj 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

L15%=j_SQc|%+Y6Ht?%X{PmU1W4Daa-6Dq0`Q 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%0DA*nKKYK$|kJ+l;>fP-1JP<+;?> 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 X2918-te0?plPS!HR_vpCpcnoJ0**;U diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/bin/demoprog_xmc4700.map b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/bin/demoprog_xmc4700.map index d54f524f..44951469 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/bin/demoprog_xmc4700.map +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/bin/demoprog_xmc4700.map @@ -18,9 +18,11 @@ Common symbol size file dma0_event_handlers 0x20 ..\obj\lib\xmclib\src\xmc_dma.o +pipe 0x1c0 ..\obj\lib\xmclib\src\xmc_usbh.o dma1_event_handlers 0x10 ..\obj\lib\xmclib\src\xmc_dma.o event_handler_list 0x80 ..\obj\lib\xmclib\src\xmc4_scu.o +is_nack 0xe ..\obj\lib\xmclib\src\xmc_usbh.o usbd_init 0x4 ..\obj\lib\xmclib\src\xmc_usbd.o xmc_device 0x208 ..\obj\lib\xmclib\src\xmc_usbd.o @@ -119,7 +121,7 @@ Discarded input sections .debug_macro 0x00000000 0x50 ..\obj\led.o .debug_macro 0x00000000 0xe66 ..\obj\led.o .debug_macro 0x00000000 0x16 ..\obj\led.o - .debug_macro 0x00000000 0x166f2 ..\obj\led.o + .debug_macro 0x00000000 0x165d5 ..\obj\led.o .debug_macro 0x00000000 0x174 ..\obj\led.o .debug_macro 0x00000000 0x22 ..\obj\led.o .debug_macro 0x00000000 0x52 ..\obj\led.o @@ -133,9 +135,9 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\led.o .debug_macro 0x00000000 0x10 ..\obj\led.o .debug_macro 0x00000000 0x35 ..\obj\led.o - .debug_macro 0x00000000 0x170 ..\obj\led.o + .debug_macro 0x00000000 0x183 ..\obj\led.o .debug_macro 0x00000000 0x46 ..\obj\led.o - .debug_macro 0x00000000 0xd4d ..\obj\led.o + .debug_macro 0x00000000 0xdc4 ..\obj\led.o .debug_macro 0x00000000 0xba ..\obj\led.o .group 0x00000000 0x8 ..\obj\lib\system_xmc4700.o .group 0x00000000 0x8 ..\obj\lib\system_xmc4700.o @@ -186,7 +188,7 @@ Discarded input sections .debug_macro 0x00000000 0x50 ..\obj\lib\system_xmc4700.o .debug_macro 0x00000000 0xe66 ..\obj\lib\system_xmc4700.o .debug_macro 0x00000000 0x16 ..\obj\lib\system_xmc4700.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\system_xmc4700.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\system_xmc4700.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc4_eru.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc4_eru.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc4_eru.o @@ -253,20 +255,20 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc4_eru.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc4_eru.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc4_eru.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc4_eru.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc4_eru.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc4_eru.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_macro 0x00000000 0x2a1 ..\obj\lib\xmclib\src\xmc4_eru.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc4_eru.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc4_eru.o .debug_line 0x00000000 0x393 ..\obj\lib\xmclib\src\xmc4_eru.o - .debug_str 0x00000000 0x77058 ..\obj\lib\xmclib\src\xmc4_eru.o + .debug_str 0x00000000 0x76a91 ..\obj\lib\xmclib\src\xmc4_eru.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc4_eru.o .debug_frame 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc4_eru.o .ARM.attributes @@ -329,34 +331,34 @@ Discarded input sections .text.XMC_FLASH_DisableEvent 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_ProgramPage - 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_EraseSector - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_lErasePhysicalSectorCommand 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_lRepairPhysicalSectorCommand 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_ErasePhysicalSector - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_RepairPhysicalSector 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_EraseUCB - 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_Reset 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_InstallProtection - 0x00000000 0x4c ..\obj\lib\xmclib\src\xmc4_flash.o + 0x00000000 0x60 ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_ConfirmProtection - 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x00000000 0x54 ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_VerifyReadProtection - 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_VerifyWriteProtection - 0x00000000 0x48 ..\obj\lib\xmclib\src\xmc4_flash.o + 0x00000000 0x5c ..\obj\lib\xmclib\src\xmc4_flash.o .text.XMC_FLASH_ResumeProtection 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_info 0x00000000 0x99b ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_abbrev 0x00000000 0x201 ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_loc 0x00000000 0x620 ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_info 0x00000000 0x9d3 ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_abbrev 0x00000000 0x210 ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_loc 0x00000000 0x6df ..\obj\lib\xmclib\src\xmc4_flash.o .debug_aranges 0x00000000 0xe0 ..\obj\lib\xmclib\src\xmc4_flash.o .debug_ranges 0x00000000 0xd0 ..\obj\lib\xmclib\src\xmc4_flash.o @@ -381,18 +383,18 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc4_flash.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_macro 0x00000000 0xda ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_line 0x00000000 0x58f ..\obj\lib\xmclib\src\xmc4_flash.o - .debug_str 0x00000000 0x7631d ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_macro 0x00000000 0xdd ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_line 0x00000000 0x5b1 ..\obj\lib\xmclib\src\xmc4_flash.o + .debug_str 0x00000000 0x75dca ..\obj\lib\xmclib\src\xmc4_flash.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc4_flash.o .debug_frame 0x00000000 0x264 ..\obj\lib\xmclib\src\xmc4_flash.o .ARM.attributes @@ -454,17 +456,17 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_macro 0x00000000 0xd4d ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_macro 0x00000000 0xdc4 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_macro 0x00000000 0xba ..\obj\lib\xmclib\src\xmc4_gpio.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc4_rtc.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc4_rtc.o @@ -523,10 +525,10 @@ Discarded input sections .text.XMC_RTC_DisableEvent 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_rtc.o .text.XMC_RTC_ClearEvent - 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_info 0x00000000 0x6f6 ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_abbrev 0x00000000 0x1da ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_loc 0x00000000 0x9a ..\obj\lib\xmclib\src\xmc4_rtc.o + 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_info 0x00000000 0x6f4 ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_abbrev 0x00000000 0x1e9 ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_loc 0x00000000 0x79 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_aranges 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_ranges 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc4_rtc.o @@ -551,14 +553,14 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_rtc.o @@ -571,9 +573,9 @@ Discarded input sections .debug_macro 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0xd7 ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_line 0x00000000 0x509 ..\obj\lib\xmclib\src\xmc4_rtc.o - .debug_str 0x00000000 0x76490 ..\obj\lib\xmclib\src\xmc4_rtc.o + .debug_str 0x00000000 0x75ec9 ..\obj\lib\xmclib\src\xmc4_rtc.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc4_rtc.o .debug_frame 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc4_rtc.o .ARM.attributes @@ -622,7 +624,7 @@ Discarded input sections .text.XMC_SCU_INTERUPT_GetEventStatus 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_INTERRUPT_ClearEventStatus - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_GetBootMode 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_SetBootMode @@ -645,7 +647,7 @@ Discarded input sections 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_IsTemperatureSensorReady 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o - .text.XMC_SCU_GetTemperature + .text.XMC_SCU_GetTemperatureMeasurement 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_IsTemperatureSensorBusy 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o @@ -654,7 +656,7 @@ Discarded input sections .text.XMC_SCU_WriteToRetentionMemory 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_ReadFromRetentionMemory - 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_TRAP_Enable 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_TRAP_Disable @@ -662,9 +664,9 @@ Discarded input sections .text.XMC_SCU_TRAP_GetStatus 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_TRAP_Trigger - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_TRAP_ClearStatus - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_PARITY_ClearStatus 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_PARITY_GetStatus @@ -684,7 +686,7 @@ Discarded input sections .text.XMC_SCU_RESET_AssertPeripheralReset 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_RESET_IsPeripheralResetAsserted - 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_GetSystemPllClockSourceFrequency 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_GetSystemPllClockFrequency @@ -740,7 +742,11 @@ Discarded input sections .text.XMC_SCU_CLOCK_GatePeripheralClock 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_IsPeripheralClockGated - 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_POWER_GetEVR13Voltage + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_POWER_GetEVR33Voltage + 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_EnableUsbPll 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_DisableUsbPll @@ -752,29 +758,67 @@ Discarded input sections .text.XMC_SCU_CLOCK_SetBackupClockCalibrationMode 0x00000000 0x34 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_POWER_EnableUsb - 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_POWER_DisableUsb - 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_IsUsbPllLocked 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_HIB_EnableHibernateDomain - 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_HIB_DisableHibernateDomain - 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_HIB_IsHibernateDomainEnabled 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_HIB_EnableInternalSlowClock 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_HIB_DisableInternalSlowClock 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_ClearEventStatus + 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_TriggerEvent + 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_EnableEvent + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_DisableEvent + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_EnterHibernateState + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_EnterHibernateStateEx + 0x00000000 0xc ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_SetWakeupTriggerInput + 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_SetPinMode + 0x00000000 0x34 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_SetPinOutputLevel + 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_SetInput0 + 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_HIB_SetSR0Input + 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_IsLowPowerOscillatorStable + 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_EnableLowPowerOscillator - 0x00000000 0x5c ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x48 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_DisableLowPowerOscillator 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_EnableLowPowerOscillatorGeneralPurposeInput + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_DisableLowPowerOscillatorGeneralPurposeInput + 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_GetLowPowerOscillatorGeneralPurposeInputStatus + 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_EnableHighPerformanceOscillator - 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_IsHighPerformanceOscillatorStable + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_DisableHighPerformanceOscillator 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_EnableHighPerformanceOscillatorGeneralPurposeInput + 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_DisableHighPerformanceOscillatorGeneralPurposeInput + 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o + .text.XMC_SCU_CLOCK_GetHighPerformanceOscillatorGeneralPurposeInputStatus + 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_EnableSystemPll 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_DisableSystemPll @@ -784,23 +828,15 @@ Discarded input sections .text.XMC_SCU_CLOCK_StepSystemPllFrequency 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_StartSystemPll - 0x00000000 0x124 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x10c ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_Init - 0x00000000 0x7c ..\obj\lib\xmclib\src\xmc4_scu.o + 0x00000000 0x8c ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_CLOCK_IsSystemPllLocked 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_INTERRUPT_SetEventHandler 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc4_scu.o .text.XMC_SCU_IRQHandler 0x00000000 0x34 ..\obj\lib\xmclib\src\xmc4_scu.o - .rodata.set_peripheral_gate.7682 - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o - .rodata.set_peripheral_reset.7561 - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o - .rodata.clear_peripheral_gate.7694 - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o - .rodata.clear_peripheral_reset.7573 - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc4_scu.o @@ -821,17 +857,159 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc4_scu.o COMMON 0x00000000 0x80 ..\obj\lib\xmclib\src\xmc4_scu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_acmp.o + .text 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_acmp.o + .data 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_acmp.o + .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_info 0x00000000 0xa4 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_abbrev 0x00000000 0x4e ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_aranges + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x197 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x87 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0xfd ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x5e ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x1df ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x1f ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x43 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_line 0x00000000 0x342 ..\obj\lib\xmclib\src\xmc_acmp.o + .debug_str 0x00000000 0x74b57 ..\obj\lib\xmclib\src\xmc_acmp.o + .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_acmp.o + .ARM.attributes + 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_acmp.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_bccu.o + .text 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_bccu.o + .data 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_bccu.o + .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_info 0x00000000 0xa4 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_abbrev 0x00000000 0x4e ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_aranges + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x197 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x87 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0xfd ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x5e ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x1df ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x1f ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x43 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_line 0x00000000 0x342 ..\obj\lib\xmclib\src\xmc_bccu.o + .debug_str 0x00000000 0x74b57 ..\obj\lib\xmclib\src\xmc_bccu.o + .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_bccu.o + .ARM.attributes + 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_bccu.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_can.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_can.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_can.o @@ -894,7 +1072,7 @@ Discarded input sections .text.XMC_CAN_MO_UpdateData 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc_can.o .text.XMC_CAN_MO_Config - 0x00000000 0x88 ..\obj\lib\xmclib\src\xmc_can.o + 0x00000000 0x94 ..\obj\lib\xmclib\src\xmc_can.o .text.XMC_CAN_MO_Transmit 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc_can.o .text.XMC_CAN_MO_ReceiveData @@ -915,9 +1093,9 @@ Discarded input sections 0x00000000 0x34 ..\obj\lib\xmclib\src\xmc_can.o .text.XMC_CAN_GATEWAY_InitSourceObject 0x00000000 0x5c ..\obj\lib\xmclib\src\xmc_can.o - .debug_info 0x00000000 0x1373 ..\obj\lib\xmclib\src\xmc_can.o - .debug_abbrev 0x00000000 0x3b2 ..\obj\lib\xmclib\src\xmc_can.o - .debug_loc 0x00000000 0xc5f ..\obj\lib\xmclib\src\xmc_can.o + .debug_info 0x00000000 0x13c4 ..\obj\lib\xmclib\src\xmc_can.o + .debug_abbrev 0x00000000 0x3b3 ..\obj\lib\xmclib\src\xmc_can.o + .debug_loc 0x00000000 0xc86 ..\obj\lib\xmclib\src\xmc_can.o .debug_aranges 0x00000000 0xd8 ..\obj\lib\xmclib\src\xmc_can.o .debug_ranges 0x00000000 0xe0 ..\obj\lib\xmclib\src\xmc_can.o @@ -942,20 +1120,20 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_can.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_can.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_can.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_can.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_can.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_can.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_can.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_can.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x70a ..\obj\lib\xmclib\src\xmc_can.o .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_can.o - .debug_line 0x00000000 0x691 ..\obj\lib\xmclib\src\xmc_can.o - .debug_str 0x00000000 0x799f3 ..\obj\lib\xmclib\src\xmc_can.o + .debug_line 0x00000000 0x69c ..\obj\lib\xmclib\src\xmc_can.o + .debug_str 0x00000000 0x79448 ..\obj\lib\xmclib\src\xmc_can.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_can.o .debug_frame 0x00000000 0x20c ..\obj\lib\xmclib\src\xmc_can.o .ARM.attributes @@ -1081,19 +1259,19 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_ccu4.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_ccu4.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_ccu4.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_ccu4.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_ccu4.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_ccu4.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_macro 0x00000000 0x740 ..\obj\lib\xmclib\src\xmc_ccu4.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_ccu4.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_line 0x00000000 0x67c ..\obj\lib\xmclib\src\xmc_ccu4.o - .debug_str 0x00000000 0x792d6 ..\obj\lib\xmclib\src\xmc_ccu4.o + .debug_str 0x00000000 0x78d0f ..\obj\lib\xmclib\src\xmc_ccu4.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_ccu4.o .debug_frame 0x00000000 0x264 ..\obj\lib\xmclib\src\xmc_ccu4.o .ARM.attributes @@ -1142,9 +1320,9 @@ Discarded input sections .text.XMC_CCU8_SetModuleClock 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ccu8.o .text.XMC_CCU8_SLICE_CompareInit - 0x00000000 0x3c ..\obj\lib\xmclib\src\xmc_ccu8.o + 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc_ccu8.o .text.XMC_CCU8_SLICE_CaptureInit - 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_ccu8.o + 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc_ccu8.o .text.XMC_CCU8_SLICE_SetOutPath 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ccu8.o .text.XMC_CCU8_SetMultiChannelShadowTransferMode @@ -1189,7 +1367,7 @@ Discarded input sections 0x00000000 0xc ..\obj\lib\xmclib\src\xmc_ccu8.o .text.XMC_CCU8_SLICE_GetLastCapturedTimerValue 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_ccu8.o - .text.XMC_CCU8_GetCapturedValueFromFifo + .text.XMC_CCU8_SLICE_GetCapturedValueFromFifo 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ccu8.o .text.XMC_CCU8_SLICE_EnableDithering 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_ccu8.o @@ -1213,9 +1391,9 @@ Discarded input sections 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc_ccu8.o .text.XMC_CCU8_SLICE_ConfigureStatusBitOutput 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_info 0x00000000 0x1deb ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_abbrev 0x00000000 0x2a3 ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_loc 0x00000000 0xb83 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_info 0x00000000 0x1dac ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_abbrev 0x00000000 0x2b2 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_loc 0x00000000 0xbba ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_aranges 0x00000000 0x158 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_ranges 0x00000000 0x148 ..\obj\lib\xmclib\src\xmc_ccu8.o @@ -1240,20 +1418,20 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x3e3 ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_line 0x00000000 0x74e ..\obj\lib\xmclib\src\xmc_ccu8.o - .debug_str 0x00000000 0x794d2 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_line 0x00000000 0x74d ..\obj\lib\xmclib\src\xmc_ccu8.o + .debug_str 0x00000000 0x78eef ..\obj\lib\xmclib\src\xmc_ccu8.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_ccu8.o .debug_frame 0x00000000 0x304 ..\obj\lib\xmclib\src\xmc_ccu8.o .ARM.attributes @@ -1335,17 +1513,17 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_common.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_common.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_common.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_common.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_common.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_common.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_common.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_common.o .debug_line 0x00000000 0x41f ..\obj\lib\xmclib\src\xmc_common.o - .debug_str 0x00000000 0x75223 ..\obj\lib\xmclib\src\xmc_common.o + .debug_str 0x00000000 0x74cf0 ..\obj\lib\xmclib\src\xmc_common.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_common.o .debug_frame 0x00000000 0xd4 ..\obj\lib\xmclib\src\xmc_common.o .ARM.attributes @@ -1435,19 +1613,19 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_dac.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_dac.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_dac.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_dac.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_dac.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_dac.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_dac.o .debug_macro 0x00000000 0x51 ..\obj\lib\xmclib\src\xmc_dac.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_dac.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_dac.o .debug_line 0x00000000 0x510 ..\obj\lib\xmclib\src\xmc_dac.o - .debug_str 0x00000000 0x76b92 ..\obj\lib\xmclib\src\xmc_dac.o + .debug_str 0x00000000 0x765cb ..\obj\lib\xmclib\src\xmc_dac.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_dac.o .debug_frame 0x00000000 0x158 ..\obj\lib\xmclib\src\xmc_dac.o .ARM.attributes @@ -1504,7 +1682,7 @@ Discarded input sections .text.XMC_DMA_GetOverrunStatus 0x00000000 0x34 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_ClearOverrunStatus - 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc_dma.o + 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_CH_Disable 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_CH_IsEnabled @@ -1516,9 +1694,9 @@ Discarded input sections .text.XMC_DMA_CH_IsSuspended 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_CH_EnableEvent - 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc_dma.o + 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_CH_DisableEvent - 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc_dma.o + 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_CH_ClearEventStatus 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_CH_Init @@ -1554,10 +1732,10 @@ Discarded input sections .text.XMC_DMA_CH_ClearDestinationPeripheralRequest 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc_dma.o .text.XMC_DMA_IRQHandler - 0x00000000 0x124 ..\obj\lib\xmclib\src\xmc_dma.o - .debug_info 0x00000000 0x18db ..\obj\lib\xmclib\src\xmc_dma.o - .debug_abbrev 0x00000000 0x30e ..\obj\lib\xmclib\src\xmc_dma.o - .debug_loc 0x00000000 0xcdd ..\obj\lib\xmclib\src\xmc_dma.o + 0x00000000 0x120 ..\obj\lib\xmclib\src\xmc_dma.o + .debug_info 0x00000000 0x18bc ..\obj\lib\xmclib\src\xmc_dma.o + .debug_abbrev 0x00000000 0x317 ..\obj\lib\xmclib\src\xmc_dma.o + .debug_loc 0x00000000 0xc89 ..\obj\lib\xmclib\src\xmc_dma.o .debug_aranges 0x00000000 0x128 ..\obj\lib\xmclib\src\xmc_dma.o .debug_ranges 0x00000000 0x118 ..\obj\lib\xmclib\src\xmc_dma.o @@ -1582,22 +1760,22 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_dma.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_dma.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_dma.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_dma.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_dma.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_dma.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x3c2 ..\obj\lib\xmclib\src\xmc_dma.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_dma.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_dma.o - .debug_line 0x00000000 0x758 ..\obj\lib\xmclib\src\xmc_dma.o - .debug_str 0x00000000 0x7944a ..\obj\lib\xmclib\src\xmc_dma.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_dma.o + .debug_line 0x00000000 0x755 ..\obj\lib\xmclib\src\xmc_dma.o + .debug_str 0x00000000 0x78e83 ..\obj\lib\xmclib\src\xmc_dma.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_dma.o - .debug_frame 0x00000000 0x2dc ..\obj\lib\xmclib\src\xmc_dma.o + .debug_frame 0x00000000 0x2d4 ..\obj\lib\xmclib\src\xmc_dma.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_dma.o COMMON 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc_dma.o @@ -1692,19 +1870,19 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_dsd.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_dsd.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_dsd.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_dsd.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_dsd.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_dsd.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_dsd.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_dsd.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_dsd.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_dsd.o .debug_line 0x00000000 0x49e ..\obj\lib\xmclib\src\xmc_dsd.o - .debug_str 0x00000000 0x765f5 ..\obj\lib\xmclib\src\xmc_dsd.o + .debug_str 0x00000000 0x7602e ..\obj\lib\xmclib\src\xmc_dsd.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_dsd.o .debug_frame 0x00000000 0x138 ..\obj\lib\xmclib\src\xmc_dsd.o .ARM.attributes @@ -1749,7 +1927,7 @@ Discarded input sections 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ebu.o .text.XMC_EBU_ConfigureRegion 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc_ebu.o - .debug_info 0x00000000 0xc52 ..\obj\lib\xmclib\src\xmc_ebu.o + .debug_info 0x00000000 0xc82 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_abbrev 0x00000000 0x218 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_loc 0x00000000 0x97 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_aranges @@ -1776,23 +1954,94 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_ebu.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_ebu.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_ebu.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_ebu.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_ebu.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_ebu.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_ebu.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_ebu.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_ebu.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ebu.o .debug_line 0x00000000 0x3a1 ..\obj\lib\xmclib\src\xmc_ebu.o - .debug_str 0x00000000 0x7641e ..\obj\lib\xmclib\src\xmc_ebu.o + .debug_str 0x00000000 0x75ea6 ..\obj\lib\xmclib\src\xmc_ebu.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_ebu.o .debug_frame 0x00000000 0x4c ..\obj\lib\xmclib\src\xmc_ebu.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_ebu.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_ecat.o + .text 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_ecat.o + .data 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_ecat.o + .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_info 0x00000000 0xa4 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_abbrev 0x00000000 0x4e ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_aranges + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x197 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x87 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0xfd ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x5e ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x1df ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x1f ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x43 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_line 0x00000000 0x342 ..\obj\lib\xmclib\src\xmc_ecat.o + .debug_str 0x00000000 0x74b57 ..\obj\lib\xmclib\src\xmc_ecat.o + .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_ecat.o + .ARM.attributes + 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_ecat.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_eru.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_eru.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_eru.o @@ -1837,6 +2086,8 @@ Discarded input sections 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_eru.o .text.XMC_ERU_ETL_SetEdgeDetection 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_eru.o + .text.XMC_ERU_ETL_GetEdgeDetection + 0x00000000 0xc ..\obj\lib\xmclib\src\xmc_eru.o .text.XMC_ERU_ETL_SetStatusFlagMode 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_eru.o .text.XMC_ERU_ETL_EnableOutputTrigger @@ -1853,12 +2104,12 @@ Discarded input sections 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_eru.o .text.XMC_ERU_OGU_SetServiceRequestMode 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_eru.o - .debug_info 0x00000000 0xa37 ..\obj\lib\xmclib\src\xmc_eru.o - .debug_abbrev 0x00000000 0x20c ..\obj\lib\xmclib\src\xmc_eru.o - .debug_loc 0x00000000 0x246 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_info 0x00000000 0xa73 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_abbrev 0x00000000 0x228 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_loc 0x00000000 0x288 ..\obj\lib\xmclib\src\xmc_eru.o .debug_aranges - 0x00000000 0x80 ..\obj\lib\xmclib\src\xmc_eru.o - .debug_ranges 0x00000000 0x70 ..\obj\lib\xmclib\src\xmc_eru.o + 0x00000000 0x88 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_ranges 0x00000000 0x78 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x1ed ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_eru.o @@ -1880,21 +2131,21 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_eru.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_eru.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_eru.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_eru.o .debug_macro 0x00000000 0x2a1 ..\obj\lib\xmclib\src\xmc_eru.o - .debug_line 0x00000000 0x43c ..\obj\lib\xmclib\src\xmc_eru.o - .debug_str 0x00000000 0x77642 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_line 0x00000000 0x44e ..\obj\lib\xmclib\src\xmc_eru.o + .debug_str 0x00000000 0x7712c ..\obj\lib\xmclib\src\xmc_eru.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_eru.o - .debug_frame 0x00000000 0x104 ..\obj\lib\xmclib\src\xmc_eru.o + .debug_frame 0x00000000 0x114 ..\obj\lib\xmclib\src\xmc_eru.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_eru.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_eth_mac.o @@ -1947,13 +2198,13 @@ Discarded input sections .text.XMC_ETH_MAC_ReadFrame 0x00000000 0x64 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_GetRxFrameSize - 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc_eth_mac.o + 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_SetManagmentClockDivider 0x00000000 0x8c ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_Enable 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_Init - 0x00000000 0x80 ..\obj\lib\xmclib\src\xmc_eth_mac.o + 0x00000000 0x90 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_Disable 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_ReadPhy @@ -1969,17 +2220,15 @@ Discarded input sections .text.XMC_ETH_MAC_EnableEvent 0x00000000 0x34 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_DisableEvent - 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_eth_mac.o + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_ClearEventStatus 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_GetEventStatus 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_ReturnRxDescriptor - 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc_eth_mac.o + 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_ReturnTxDescriptor - 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .text.XMC_ETH_MAC_IsTxDescriptorOwnedByDma - 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_eth_mac.o + 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_SetVLANTag 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_InitPTP @@ -1998,13 +2247,13 @@ Discarded input sections 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_eth_mac.o .text.XMC_ETH_MAC_GetTxTimeStamp 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_info 0x00000000 0x1a9b ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_abbrev 0x00000000 0x333 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_loc 0x00000000 0x930 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_info 0x00000000 0x1a73 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_abbrev 0x00000000 0x315 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_loc 0x00000000 0x987 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_aranges - 0x00000000 0x118 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_ranges 0x00000000 0x108 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_macro 0x00000000 0x374 ..\obj\lib\xmclib\src\xmc_eth_mac.o + 0x00000000 0x110 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_ranges 0x00000000 0x100 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_macro 0x00000000 0x264 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_eth_mac.o @@ -2025,24 +2274,24 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_macro 0x00000000 0x131 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_eth_mac.o .debug_macro 0x00000000 0x29 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_line 0x00000000 0x6f8 ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_str 0x00000000 0x782d2 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_line 0x00000000 0x6fa ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_str 0x00000000 0x77d0e ..\obj\lib\xmclib\src\xmc_eth_mac.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_eth_mac.o - .debug_frame 0x00000000 0x2b4 ..\obj\lib\xmclib\src\xmc_eth_mac.o + .debug_frame 0x00000000 0x2a4 ..\obj\lib\xmclib\src\xmc_eth_mac.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_eth_mac.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_fce.o @@ -2124,19 +2373,19 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_fce.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_fce.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_fce.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_fce.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_fce.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_fce.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_fce.o .debug_macro 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc_fce.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_fce.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_fce.o .debug_line 0x00000000 0x482 ..\obj\lib\xmclib\src\xmc_fce.o - .debug_str 0x00000000 0x76112 ..\obj\lib\xmclib\src\xmc_fce.o + .debug_str 0x00000000 0x75b4b ..\obj\lib\xmclib\src\xmc_fce.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_fce.o .debug_frame 0x00000000 0x148 ..\obj\lib\xmclib\src\xmc_fce.o .ARM.attributes @@ -2198,17 +2447,17 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_macro 0x00000000 0xd4d ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_macro 0x00000000 0xdc4 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_macro 0x00000000 0xba ..\obj\lib\xmclib\src\xmc_gpio.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_hrpwm.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_hrpwm.o @@ -2267,17 +2516,17 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_hrpwm.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_hrpwm.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_hrpwm.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_hrpwm.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_hrpwm.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_hrpwm.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_hrpwm.o .debug_line 0x00000000 0x344 ..\obj\lib\xmclib\src\xmc_hrpwm.o - .debug_str 0x00000000 0x75088 ..\obj\lib\xmclib\src\xmc_hrpwm.o + .debug_str 0x00000000 0x74b55 ..\obj\lib\xmclib\src\xmc_hrpwm.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_hrpwm.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_hrpwm.o @@ -2346,7 +2595,7 @@ Discarded input sections 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_i2c.o .text.XMC_I2C_CH_DisableEvent 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_i2c.o - .debug_info 0x00000000 0xc42 ..\obj\lib\xmclib\src\xmc_i2c.o + .debug_info 0x00000000 0xc43 ..\obj\lib\xmclib\src\xmc_i2c.o .debug_abbrev 0x00000000 0x2db ..\obj\lib\xmclib\src\xmc_i2c.o .debug_loc 0x00000000 0x4a9 ..\obj\lib\xmclib\src\xmc_i2c.o .debug_aranges @@ -2373,20 +2622,20 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_i2c.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_i2c.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_i2c.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_i2c.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_i2c.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_i2c.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_i2c.o - .debug_macro 0x00000000 0x88 ..\obj\lib\xmclib\src\xmc_i2c.o - .debug_macro 0x00000000 0x2da ..\obj\lib\xmclib\src\xmc_i2c.o + .debug_macro 0x00000000 0x8b ..\obj\lib\xmclib\src\xmc_i2c.o + .debug_macro 0x00000000 0x2ef ..\obj\lib\xmclib\src\xmc_i2c.o .debug_macro 0x00000000 0x2e ..\obj\lib\xmclib\src\xmc_i2c.o .debug_line 0x00000000 0x58c ..\obj\lib\xmclib\src\xmc_i2c.o - .debug_str 0x00000000 0x768a4 ..\obj\lib\xmclib\src\xmc_i2c.o + .debug_str 0x00000000 0x763ae ..\obj\lib\xmclib\src\xmc_i2c.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_i2c.o .debug_frame 0x00000000 0x12c ..\obj\lib\xmclib\src\xmc_i2c.o .ARM.attributes @@ -2429,10 +2678,10 @@ Discarded input sections .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_i2s.o .text.XMC_I2S_CH_SetBaudrate 0x00000000 0x34 ..\obj\lib\xmclib\src\xmc_i2s.o - .text.XMC_I2S_CH_Init - 0x00000000 0x64 ..\obj\lib\xmclib\src\xmc_i2s.o .text.XMC_I2S_CH_SetSystemWordLength 0x00000000 0x64 ..\obj\lib\xmclib\src\xmc_i2s.o + .text.XMC_I2S_CH_Init + 0x00000000 0x6c ..\obj\lib\xmclib\src\xmc_i2s.o .text.XMC_I2S_CH_Transmit 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc_i2s.o .text.XMC_I2S_CH_GetReceivedData @@ -2443,8 +2692,8 @@ Discarded input sections 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_i2s.o .text.XMC_I2S_CH_DisableEvent 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_info 0x00000000 0x978 ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_abbrev 0x00000000 0x265 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_info 0x00000000 0x992 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_abbrev 0x00000000 0x29d ..\obj\lib\xmclib\src\xmc_i2s.o .debug_loc 0x00000000 0x3ca ..\obj\lib\xmclib\src\xmc_i2s.o .debug_aranges 0x00000000 0x58 ..\obj\lib\xmclib\src\xmc_i2s.o @@ -2470,21 +2719,21 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_macro 0x00000000 0x8e ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_macro 0x00000000 0x2da ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_macro 0x00000000 0x91 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_macro 0x00000000 0x2ef ..\obj\lib\xmclib\src\xmc_i2s.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_line 0x00000000 0x48f ..\obj\lib\xmclib\src\xmc_i2s.o - .debug_str 0x00000000 0x76caa ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_line 0x00000000 0x494 ..\obj\lib\xmclib\src\xmc_i2s.o + .debug_str 0x00000000 0x76720 ..\obj\lib\xmclib\src\xmc_i2s.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_i2s.o .debug_frame 0x00000000 0xb8 ..\obj\lib\xmclib\src\xmc_i2s.o .ARM.attributes @@ -2582,23 +2831,165 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_ledts.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_ledts.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_ledts.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_ledts.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_ledts.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_ledts.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_ledts.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_ledts.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_ledts.o .debug_macro 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc_ledts.o .debug_line 0x00000000 0x4b3 ..\obj\lib\xmclib\src\xmc_ledts.o - .debug_str 0x00000000 0x765bd ..\obj\lib\xmclib\src\xmc_ledts.o + .debug_str 0x00000000 0x75ff6 ..\obj\lib\xmclib\src\xmc_ledts.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_ledts.o .debug_frame 0x00000000 0x140 ..\obj\lib\xmclib\src\xmc_ledts.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_ledts.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_math.o + .text 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_math.o + .data 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_math.o + .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_math.o + .debug_info 0x00000000 0xa4 ..\obj\lib\xmclib\src\xmc_math.o + .debug_abbrev 0x00000000 0x4e ..\obj\lib\xmclib\src\xmc_math.o + .debug_aranges + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x197 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x87 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0xfd ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x5e ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x1df ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x1f ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x43 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_math.o + .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_math.o + .debug_line 0x00000000 0x342 ..\obj\lib\xmclib\src\xmc_math.o + .debug_str 0x00000000 0x74b57 ..\obj\lib\xmclib\src\xmc_math.o + .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_math.o + .ARM.attributes + 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_math.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_pau.o + .text 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_pau.o + .data 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_pau.o + .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_info 0x00000000 0xa4 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_abbrev 0x00000000 0x4e ..\obj\lib\xmclib\src\xmc_pau.o + .debug_aranges + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x197 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x87 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0xfd ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x5e ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x1df ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x1f ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x43 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_line 0x00000000 0x340 ..\obj\lib\xmclib\src\xmc_pau.o + .debug_str 0x00000000 0x74b55 ..\obj\lib\xmclib\src\xmc_pau.o + .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_pau.o + .ARM.attributes + 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_pau.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_posif.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_posif.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_posif.o @@ -2638,7 +3029,7 @@ Discarded input sections .text.XMC_POSIF_Disable 0x00000000 0x3c ..\obj\lib\xmclib\src\xmc_posif.o .text.XMC_POSIF_Init - 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_posif.o + 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc_posif.o .text.XMC_POSIF_HSC_Init 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_posif.o .text.XMC_POSIF_QD_Init @@ -2676,23 +3067,94 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_posif.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_posif.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_posif.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_posif.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_posif.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_posif.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_posif.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_posif.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_posif.o .debug_macro 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_posif.o .debug_line 0x00000000 0x41d ..\obj\lib\xmclib\src\xmc_posif.o - .debug_str 0x00000000 0x76587 ..\obj\lib\xmclib\src\xmc_posif.o + .debug_str 0x00000000 0x75fc0 ..\obj\lib\xmclib\src\xmc_posif.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_posif.o .debug_frame 0x00000000 0xc4 ..\obj\lib\xmclib\src\xmc_posif.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_posif.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_prng.o + .text 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_prng.o + .data 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_prng.o + .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_info 0x00000000 0xa4 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_abbrev 0x00000000 0x4e ..\obj\lib\xmclib\src\xmc_prng.o + .debug_aranges + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x197 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x87 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0xfd ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x5e ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x1df ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x1f ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x43 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_line 0x00000000 0x342 ..\obj\lib\xmclib\src\xmc_prng.o + .debug_str 0x00000000 0x74b57 ..\obj\lib\xmclib\src\xmc_prng.o + .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_prng.o + .ARM.attributes + 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_prng.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_rtc.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_rtc.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_rtc.o @@ -2747,22 +3209,26 @@ Discarded input sections 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc_rtc.o .text.XMC_RTC_GetTime 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_rtc.o + .text.XMC_RTC_SetTimeStdFormat + 0x00000000 0x70 ..\obj\lib\xmclib\src\xmc_rtc.o .text.XMC_RTC_GetTimeStdFormat 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_rtc.o .text.XMC_RTC_SetAlarm 0x00000000 0x30 ..\obj\lib\xmclib\src\xmc_rtc.o .text.XMC_RTC_GetAlarm 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_rtc.o + .text.XMC_RTC_SetAlarmStdFormat + 0x00000000 0x64 ..\obj\lib\xmclib\src\xmc_rtc.o .text.XMC_RTC_GetAlarmStdFormat 0x00000000 0x4c ..\obj\lib\xmclib\src\xmc_rtc.o .text.XMC_RTC_GetEventStatus 0x00000000 0xc ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_info 0x00000000 0x74f ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_abbrev 0x00000000 0x1b7 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_loc 0x00000000 0x21 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_info 0x00000000 0x7ec ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_abbrev 0x00000000 0x215 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_loc 0x00000000 0x63 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_aranges - 0x00000000 0x68 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_ranges 0x00000000 0x58 ..\obj\lib\xmclib\src\xmc_rtc.o + 0x00000000 0x78 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_ranges 0x00000000 0x68 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x292 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_rtc.o @@ -2784,16 +3250,16 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_rtc.o @@ -2805,10 +3271,10 @@ Discarded input sections .debug_macro 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0xd7 ..\obj\lib\xmclib\src\xmc_rtc.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_line 0x00000000 0x53c ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_str 0x00000000 0x7653a ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_line 0x00000000 0x56d ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_str 0x00000000 0x75fa6 ..\obj\lib\xmclib\src\xmc_rtc.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_rtc.o - .debug_frame 0x00000000 0xc0 ..\obj\lib\xmclib\src\xmc_rtc.o + .debug_frame 0x00000000 0xf8 ..\obj\lib\xmclib\src\xmc_rtc.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_rtc.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_sdmmc.o @@ -2862,7 +3328,7 @@ Discarded input sections .text.XMC_SDMMC_DisableEvent 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_sdmmc.o .text.XMC_SDMMC_ClearEvent - 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_sdmmc.o + 0x00000000 0xc ..\obj\lib\xmclib\src\xmc_sdmmc.o .text.XMC_SDMMC_GetEvent 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc_sdmmc.o .text.XMC_SDMMC_GetR2Response @@ -2870,14 +3336,14 @@ Discarded input sections .text.XMC_SDMMC_SendCommand 0x00000000 0xc ..\obj\lib\xmclib\src\xmc_sdmmc.o .text.XMC_SDMMC_SetDataTransferMode - 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_info 0x00000000 0xc49 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_abbrev 0x00000000 0x27b ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_loc 0x00000000 0x22b ..\obj\lib\xmclib\src\xmc_sdmmc.o + 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_info 0x00000000 0xb90 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_abbrev 0x00000000 0x245 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_loc 0x00000000 0x204 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_aranges 0x00000000 0x80 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_ranges 0x00000000 0x70 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_macro 0x00000000 0x1da ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_macro 0x00000000 0x1db ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_sdmmc.o @@ -2898,19 +3364,19 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_macro 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_line 0x00000000 0x464 ..\obj\lib\xmclib\src\xmc_sdmmc.o - .debug_str 0x00000000 0x774a9 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_macro 0x00000000 0x47 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_line 0x00000000 0x45b ..\obj\lib\xmclib\src\xmc_sdmmc.o + .debug_str 0x00000000 0x76c99 ..\obj\lib\xmclib\src\xmc_sdmmc.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_sdmmc.o .debug_frame 0x00000000 0x108 ..\obj\lib\xmclib\src\xmc_sdmmc.o .ARM.attributes @@ -2998,21 +3464,21 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_spi.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_spi.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_spi.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_spi.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_spi.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_spi.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_spi.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_spi.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_spi.o - .debug_macro 0x00000000 0x8e ..\obj\lib\xmclib\src\xmc_spi.o - .debug_macro 0x00000000 0x2da ..\obj\lib\xmclib\src\xmc_spi.o - .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_spi.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_spi.o + .debug_macro 0x00000000 0x91 ..\obj\lib\xmclib\src\xmc_spi.o + .debug_macro 0x00000000 0x2ef ..\obj\lib\xmclib\src\xmc_spi.o + .debug_macro 0x00000000 0x2a ..\obj\lib\xmclib\src\xmc_spi.o .debug_line 0x00000000 0x4b8 ..\obj\lib\xmclib\src\xmc_spi.o - .debug_str 0x00000000 0x76e93 ..\obj\lib\xmclib\src\xmc_spi.o + .debug_str 0x00000000 0x76909 ..\obj\lib\xmclib\src\xmc_spi.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_spi.o .debug_frame 0x00000000 0xe4 ..\obj\lib\xmclib\src\xmc_spi.o .ARM.attributes @@ -3058,7 +3524,7 @@ Discarded input sections .text.XMC_UART_CH_Transmit 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc_uart.o .text.XMC_UART_CH_Stop - 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_uart.o + 0x00000000 0x24 ..\obj\lib\xmclib\src\xmc_uart.o .text.XMC_UART_CH_EnableEvent 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_uart.o .text.XMC_UART_CH_DisableEvent @@ -3083,18 +3549,18 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x00000000 0x8e ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x00000000 0x2da ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x00000000 0x91 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x00000000 0x2ef ..\obj\lib\xmclib\src\xmc_uart.o .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_uart.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbd.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbd.o @@ -3248,28 +3714,173 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_usbd.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_usbd.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_usbd.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_usbd.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_usbd.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_usbd.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x29 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0x2c3 ..\obj\lib\xmclib\src\xmc_usbd.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_usbd.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_macro 0x00000000 0xc5 ..\obj\lib\xmclib\src\xmc_usbd.o .debug_line 0x00000000 0x981 ..\obj\lib\xmclib\src\xmc_usbd.o - .debug_str 0x00000000 0x78ded ..\obj\lib\xmclib\src\xmc_usbd.o + .debug_str 0x00000000 0x78826 ..\obj\lib\xmclib\src\xmc_usbd.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_usbd.o .debug_frame 0x00000000 0x3d4 ..\obj\lib\xmclib\src\xmc_usbd.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_usbd.o COMMON 0x00000000 0x20c ..\obj\lib\xmclib\src\xmc_usbd.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usbh.o + .text 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_usbh.o + .data 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_usbh.o + .bss 0x00000000 0x0 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_lStartTransfer + 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_GetVersion + 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_GetCapabilities + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PortSuspend + 0x00000000 0x3c ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PortGetState + 0x00000000 0x3c ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PipeModify + 0x00000000 0x68 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PipeReset + 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PipeTransfer + 0x00000000 0xb8 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PipeTransferGetResult + 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_GetFrameNumber + 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PortVbusOnOff + 0x00000000 0x68 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_Initialize + 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PipeDelete + 0x00000000 0x54 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PipeCreate + 0x00000000 0xdc ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_HandleIrq + 0x00000000 0x4a8 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_GetInterruptStatus + 0x00000000 0xc ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_Select_VBUS + 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_TurnOffResumeBit + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_osDelay + 0x00000000 0x4 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PipeTransferAbort + 0x00000000 0xb4 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PortResume + 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PortReset + 0x00000000 0x6c ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_PowerControl + 0x00000000 0x168 ..\obj\lib\xmclib\src\xmc_usbh.o + .text.XMC_USBH_Uninitialize + 0x00000000 0x18 ..\obj\lib\xmclib\src\xmc_usbh.o + .data.XMC_USBH0_device + 0x00000000 0x14 ..\obj\lib\xmclib\src\xmc_usbh.o + .bss.XMC_USBH0_dfifo_ptr + 0x00000000 0x38 ..\obj\lib\xmclib\src\xmc_usbh.o + .data.VBUS_pin + 0x00000000 0x4 ..\obj\lib\xmclib\src\xmc_usbh.o + .data.VBUS_port + 0x00000000 0x4 ..\obj\lib\xmclib\src\xmc_usbh.o + .rodata.xmc_usbh_driver_version + 0x00000000 0x4 ..\obj\lib\xmclib\src\xmc_usbh.o + .rodata.Driver_USBH0 + 0x00000000 0x48 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_info 0x00000000 0x2287 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_abbrev 0x00000000 0x42d ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_loc 0x00000000 0x1685 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_aranges + 0x00000000 0xd8 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_ranges 0x00000000 0xc8 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x1fa ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x87 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x44 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0xfd ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x5e ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x1df ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x9c ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x52 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x1f ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x43 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x20 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x187 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x28 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0xdc4 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0xba ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_macro 0x00000000 0x1f8 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_line 0x00000000 0x8a4 ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_str 0x00000000 0x7db16 ..\obj\lib\xmclib\src\xmc_usbh.o + .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_usbh.o + .debug_frame 0x00000000 0x248 ..\obj\lib\xmclib\src\xmc_usbh.o + .ARM.attributes + 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_usbh.o + COMMON 0x00000000 0x1ce ..\obj\lib\xmclib\src\xmc_usbh.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usic.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usic.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_usic.o @@ -3341,18 +3952,18 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_usic.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_macro 0x00000000 0x88 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_macro 0x00000000 0x2da ..\obj\lib\xmclib\src\xmc_usic.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_macro 0x00000000 0x8b ..\obj\lib\xmclib\src\xmc_usic.o + .debug_macro 0x00000000 0x2ef ..\obj\lib\xmclib\src\xmc_usic.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_usic.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_vadc.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_vadc.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_vadc.o @@ -3422,9 +4033,11 @@ Discarded input sections .text.XMC_VADC_GROUP_SetSyncMaster 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_vadc.o .text.XMC_VADC_GROUP_CheckSlaveReadiness - 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc_vadc.o + 0x00000000 0x3c ..\obj\lib\xmclib\src\xmc_vadc.o .text.XMC_VADC_GROUP_IgnoreSlaveReadiness - 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc_vadc.o + 0x00000000 0x40 ..\obj\lib\xmclib\src\xmc_vadc.o + .text.XMC_VADC_GROUP_SetSyncSlaveReadySignal + 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_vadc.o .text.XMC_VADC_GROUP_EnableChannelSyncRequest 0x00000000 0x1c ..\obj\lib\xmclib\src\xmc_vadc.o .text.XMC_VADC_GROUP_DisableChannelSyncRequest @@ -3527,13 +4140,13 @@ Discarded input sections 0x00000000 0x2c ..\obj\lib\xmclib\src\xmc_vadc.o .rodata.g_xmc_vadc_group_array 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_info 0x00000000 0x3142 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_abbrev 0x00000000 0x331 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_loc 0x00000000 0x19e5 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_info 0x00000000 0x316c ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_abbrev 0x00000000 0x313 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_loc 0x00000000 0x19cc ..\obj\lib\xmclib\src\xmc_vadc.o .debug_aranges - 0x00000000 0x240 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_ranges 0x00000000 0x230 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_macro 0x00000000 0x1d6 ..\obj\lib\xmclib\src\xmc_vadc.o + 0x00000000 0x248 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_ranges 0x00000000 0x238 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_macro 0x00000000 0x1dc ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x892 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x174 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x22 ..\obj\lib\xmclib\src\xmc_vadc.o @@ -3554,21 +4167,21 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_vadc.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_macro 0x00000000 0xa0 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_macro 0x00000000 0x66 ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_line 0x00000000 0xb1b ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_str 0x00000000 0x783da ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_macro 0x00000000 0x9f ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_macro 0x00000000 0x74 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_line 0x00000000 0xb46 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_str 0x00000000 0x77eb8 ..\obj\lib\xmclib\src\xmc_vadc.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_vadc.o - .debug_frame 0x00000000 0x568 ..\obj\lib\xmclib\src\xmc_vadc.o + .debug_frame 0x00000000 0x590 ..\obj\lib\xmclib\src\xmc_vadc.o .ARM.attributes 0x00000000 0x39 ..\obj\lib\xmclib\src\xmc_vadc.o .group 0x00000000 0x8 ..\obj\lib\xmclib\src\xmc_wdt.o @@ -3637,18 +4250,18 @@ Discarded input sections .debug_macro 0x00000000 0x30d ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x10 ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x35 ..\obj\lib\xmclib\src\xmc_wdt.o - .debug_macro 0x00000000 0x162 ..\obj\lib\xmclib\src\xmc_wdt.o + .debug_macro 0x00000000 0x16e ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x2d ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x3b ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x50 ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0xe66 ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x16 ..\obj\lib\xmclib\src\xmc_wdt.o - .debug_macro 0x00000000 0x166f2 ..\obj\lib\xmclib\src\xmc_wdt.o - .debug_macro 0x00000000 0x12 ..\obj\lib\xmclib\src\xmc_wdt.o + .debug_macro 0x00000000 0x165d5 ..\obj\lib\xmclib\src\xmc_wdt.o + .debug_macro 0x00000000 0x19 ..\obj\lib\xmclib\src\xmc_wdt.o .debug_macro 0x00000000 0x46 ..\obj\lib\xmclib\src\xmc_wdt.o - .debug_macro 0x00000000 0xa6 ..\obj\lib\xmclib\src\xmc_wdt.o + .debug_macro 0x00000000 0xa5 ..\obj\lib\xmclib\src\xmc_wdt.o .debug_line 0x00000000 0x394 ..\obj\lib\xmclib\src\xmc_wdt.o - .debug_str 0x00000000 0x75f00 ..\obj\lib\xmclib\src\xmc_wdt.o + .debug_str 0x00000000 0x75939 ..\obj\lib\xmclib\src\xmc_wdt.o .comment 0x00000000 0x6f ..\obj\lib\xmclib\src\xmc_wdt.o .debug_frame 0x00000000 0x58 ..\obj\lib\xmclib\src\xmc_wdt.o .ARM.attributes @@ -3683,7 +4296,7 @@ Discarded input sections .debug_macro 0x00000000 0x50 ..\obj\main.o .debug_macro 0x00000000 0xe66 ..\obj\main.o .debug_macro 0x00000000 0x16 ..\obj\main.o - .debug_macro 0x00000000 0x166f2 ..\obj\main.o + .debug_macro 0x00000000 0x165d5 ..\obj\main.o .data 0x00000000 0x0 ..\obj\startup_xmc4700.o .bss 0x00000000 0x0 ..\obj\startup_xmc4700.o .group 0x00000000 0x8 ..\obj\timer.o @@ -3718,7 +4331,7 @@ Discarded input sections .debug_macro 0x00000000 0x50 ..\obj\timer.o .debug_macro 0x00000000 0xe66 ..\obj\timer.o .debug_macro 0x00000000 0x16 ..\obj\timer.o - .debug_macro 0x00000000 0x166f2 ..\obj\timer.o + .debug_macro 0x00000000 0x165d5 ..\obj\timer.o .text 0x00000000 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-exit.o) .data 0x00000000 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-exit.o) .bss 0x00000000 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-exit.o) @@ -3766,7 +4379,7 @@ LOAD c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none- 0x00000000 __HEAP_SIZE = 0x0 0x00000100 __STACK_SIZE = 0x100 -.text 0x08004000 0xd48 +.text 0x08004000 0xd08 *(.isr_vector) .isr_vector 0x08004000 0x204 ..\obj\startup_xmc4700.o 0x08004000 __isr_vector @@ -3806,192 +4419,192 @@ LOAD c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none- 0x08004508 0x8c ..\obj\lib\system_xmc4700.o 0x08004508 SystemCoreClockUpdate .text.SystemCoreClockSetup - 0x08004594 0x1bc ..\obj\lib\system_xmc4700.o + 0x08004594 0x198 ..\obj\lib\system_xmc4700.o 0x08004594 SystemCoreClockSetup .text.SystemInit - 0x08004750 0x1c ..\obj\lib\system_xmc4700.o - 0x08004750 SystemInit + 0x0800472c 0x1c ..\obj\lib\system_xmc4700.o + 0x0800472c SystemInit .text.XMC_GPIO_Init - 0x0800476c 0x94 ..\obj\lib\xmclib\src\xmc4_gpio.o - 0x0800476c XMC_GPIO_Init + 0x08004748 0x94 ..\obj\lib\xmclib\src\xmc4_gpio.o + 0x08004748 XMC_GPIO_Init .text.XMC_SCU_RESET_DeassertPeripheralReset - 0x08004800 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o - 0x08004800 XMC_SCU_RESET_DeassertPeripheralReset + 0x080047dc 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x080047dc XMC_SCU_RESET_DeassertPeripheralReset .text.XMC_SCU_CLOCK_GetPeripheralClockFrequency - 0x08004818 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o - 0x08004818 XMC_SCU_CLOCK_GetPeripheralClockFrequency + 0x080047f4 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x080047f4 XMC_SCU_CLOCK_GetPeripheralClockFrequency .text.XMC_SCU_CLOCK_UngatePeripheralClock - 0x08004830 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o - 0x08004830 XMC_SCU_CLOCK_UngatePeripheralClock + 0x0800480c 0x18 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x0800480c XMC_SCU_CLOCK_UngatePeripheralClock .text.XMC_GPIO_SetMode - 0x08004848 0x30 ..\obj\lib\xmclib\src\xmc_gpio.o - 0x08004848 XMC_GPIO_SetMode + 0x08004824 0x30 ..\obj\lib\xmclib\src\xmc_gpio.o + 0x08004824 XMC_GPIO_SetMode .text.XMC_UART_CH_Init - 0x08004878 0x68 ..\obj\lib\xmclib\src\xmc_uart.o - 0x08004878 XMC_UART_CH_Init + 0x08004854 0x6c ..\obj\lib\xmclib\src\xmc_uart.o + 0x08004854 XMC_UART_CH_Init .text.XMC_UART_CH_GetReceivedData - 0x080048e0 0x18 ..\obj\lib\xmclib\src\xmc_uart.o - 0x080048e0 XMC_UART_CH_GetReceivedData + 0x080048c0 0x18 ..\obj\lib\xmclib\src\xmc_uart.o + 0x080048c0 XMC_UART_CH_GetReceivedData .text.XMC_USIC_CH_SetBaudrate - 0x080048f8 0x8c ..\obj\lib\xmclib\src\xmc_usic.o - 0x080048f8 XMC_USIC_CH_SetBaudrate + 0x080048d8 0x8c ..\obj\lib\xmclib\src\xmc_usic.o + 0x080048d8 XMC_USIC_CH_SetBaudrate .text.XMC_USIC_CH_TXFIFO_Configure - 0x08004984 0x30 ..\obj\lib\xmclib\src\xmc_usic.o - 0x08004984 XMC_USIC_CH_TXFIFO_Configure + 0x08004964 0x30 ..\obj\lib\xmclib\src\xmc_usic.o + 0x08004964 XMC_USIC_CH_TXFIFO_Configure .text.XMC_USIC_CH_RXFIFO_Configure - 0x080049b4 0x34 ..\obj\lib\xmclib\src\xmc_usic.o - 0x080049b4 XMC_USIC_CH_RXFIFO_Configure + 0x08004994 0x34 ..\obj\lib\xmclib\src\xmc_usic.o + 0x08004994 XMC_USIC_CH_RXFIFO_Configure .text.XMC_USIC_Enable - 0x080049e8 0x5c ..\obj\lib\xmclib\src\xmc_usic.o - 0x080049e8 XMC_USIC_Enable + 0x080049c8 0x5c ..\obj\lib\xmclib\src\xmc_usic.o + 0x080049c8 XMC_USIC_Enable .text.XMC_USIC_CH_Enable - 0x08004a44 0x74 ..\obj\lib\xmclib\src\xmc_usic.o - 0x08004a44 XMC_USIC_CH_Enable - .text.Init 0x08004ab8 0x10 ..\obj\main.o - .text.main 0x08004ac8 0x14 ..\obj\main.o - 0x08004ac8 main - .text 0x08004adc 0x134 ..\obj\startup_xmc4700.o - 0x08004adc Reset_Handler - 0x08004b2a NMI_Handler - 0x08004b2c HardFault_Handler - 0x08004b2e MemManage_Handler - 0x08004b30 BusFault_Handler - 0x08004b32 UsageFault_Handler - 0x08004b34 SVC_Handler - 0x08004b36 DebugMon_Handler - 0x08004b38 PendSV_Handler - 0x08004b3c Default_Handler - 0x08004b3e SCU_0_IRQHandler - 0x08004b40 ERU0_0_IRQHandler - 0x08004b42 ERU0_1_IRQHandler - 0x08004b44 ERU0_2_IRQHandler - 0x08004b46 ERU0_3_IRQHandler - 0x08004b48 ERU1_0_IRQHandler - 0x08004b4a ERU1_1_IRQHandler - 0x08004b4c ERU1_2_IRQHandler - 0x08004b4e ERU1_3_IRQHandler - 0x08004b50 PMU0_0_IRQHandler - 0x08004b52 VADC0_C0_0_IRQHandler - 0x08004b54 VADC0_C0_1_IRQHandler - 0x08004b56 VADC0_C0_2_IRQHandler - 0x08004b58 VADC0_C0_3_IRQHandler - 0x08004b5a VADC0_G0_0_IRQHandler - 0x08004b5c VADC0_G0_1_IRQHandler - 0x08004b5e VADC0_G0_2_IRQHandler - 0x08004b60 VADC0_G0_3_IRQHandler - 0x08004b62 VADC0_G1_0_IRQHandler - 0x08004b64 VADC0_G1_1_IRQHandler - 0x08004b66 VADC0_G1_2_IRQHandler - 0x08004b68 VADC0_G1_3_IRQHandler - 0x08004b6a VADC0_G2_0_IRQHandler - 0x08004b6c VADC0_G2_1_IRQHandler - 0x08004b6e VADC0_G2_2_IRQHandler - 0x08004b70 VADC0_G2_3_IRQHandler - 0x08004b72 VADC0_G3_0_IRQHandler - 0x08004b74 VADC0_G3_1_IRQHandler - 0x08004b76 VADC0_G3_2_IRQHandler - 0x08004b78 VADC0_G3_3_IRQHandler - 0x08004b7a DSD0_0_IRQHandler - 0x08004b7c DSD0_1_IRQHandler - 0x08004b7e DSD0_2_IRQHandler - 0x08004b80 DSD0_3_IRQHandler - 0x08004b82 DSD0_4_IRQHandler - 0x08004b84 DSD0_5_IRQHandler - 0x08004b86 DSD0_6_IRQHandler - 0x08004b88 DSD0_7_IRQHandler - 0x08004b8a DAC0_0_IRQHandler - 0x08004b8c DAC0_1_IRQHandler - 0x08004b8e CCU40_0_IRQHandler - 0x08004b90 CCU40_1_IRQHandler - 0x08004b92 CCU40_2_IRQHandler - 0x08004b94 CCU40_3_IRQHandler - 0x08004b96 CCU41_0_IRQHandler - 0x08004b98 CCU41_1_IRQHandler - 0x08004b9a CCU41_2_IRQHandler - 0x08004b9c CCU41_3_IRQHandler - 0x08004b9e CCU42_0_IRQHandler - 0x08004ba0 CCU42_1_IRQHandler - 0x08004ba2 CCU42_2_IRQHandler - 0x08004ba4 CCU42_3_IRQHandler - 0x08004ba6 CCU43_0_IRQHandler - 0x08004ba8 CCU43_1_IRQHandler - 0x08004baa CCU43_2_IRQHandler - 0x08004bac CCU43_3_IRQHandler - 0x08004bae CCU80_0_IRQHandler - 0x08004bb0 CCU80_1_IRQHandler - 0x08004bb2 CCU80_2_IRQHandler - 0x08004bb4 CCU80_3_IRQHandler - 0x08004bb6 CCU81_0_IRQHandler - 0x08004bb8 CCU81_1_IRQHandler - 0x08004bba CCU81_2_IRQHandler - 0x08004bbc CCU81_3_IRQHandler - 0x08004bbe POSIF0_0_IRQHandler - 0x08004bc0 POSIF0_1_IRQHandler - 0x08004bc2 POSIF1_0_IRQHandler - 0x08004bc4 POSIF1_1_IRQHandler - 0x08004bc6 CAN0_0_IRQHandler - 0x08004bc8 CAN0_1_IRQHandler - 0x08004bca CAN0_2_IRQHandler - 0x08004bcc CAN0_3_IRQHandler - 0x08004bce CAN0_4_IRQHandler - 0x08004bd0 CAN0_5_IRQHandler - 0x08004bd2 CAN0_6_IRQHandler - 0x08004bd4 CAN0_7_IRQHandler - 0x08004bd6 USIC0_0_IRQHandler - 0x08004bd8 USIC0_1_IRQHandler - 0x08004bda USIC0_2_IRQHandler - 0x08004bdc USIC0_3_IRQHandler - 0x08004bde USIC0_4_IRQHandler - 0x08004be0 USIC0_5_IRQHandler - 0x08004be2 USIC1_0_IRQHandler - 0x08004be4 USIC1_1_IRQHandler - 0x08004be6 USIC1_2_IRQHandler - 0x08004be8 USIC1_3_IRQHandler - 0x08004bea USIC1_4_IRQHandler - 0x08004bec USIC1_5_IRQHandler - 0x08004bee USIC2_0_IRQHandler - 0x08004bf0 USIC2_1_IRQHandler - 0x08004bf2 USIC2_2_IRQHandler - 0x08004bf4 USIC2_3_IRQHandler - 0x08004bf6 USIC2_4_IRQHandler - 0x08004bf8 USIC2_5_IRQHandler - 0x08004bfa LEDTS0_0_IRQHandler - 0x08004bfc FCE0_0_IRQHandler - 0x08004bfe GPDMA0_0_IRQHandler - 0x08004c00 SDMMC0_0_IRQHandler - 0x08004c02 USB0_0_IRQHandler - 0x08004c04 ETH0_0_IRQHandler - 0x08004c06 GPDMA1_0_IRQHandler + 0x08004a24 0x74 ..\obj\lib\xmclib\src\xmc_usic.o + 0x08004a24 XMC_USIC_CH_Enable + .text.Init 0x08004a98 0x10 ..\obj\main.o + .text.main 0x08004aa8 0x14 ..\obj\main.o + 0x08004aa8 main + .text 0x08004abc 0x134 ..\obj\startup_xmc4700.o + 0x08004abc Reset_Handler + 0x08004b0a NMI_Handler + 0x08004b0c HardFault_Handler + 0x08004b0e MemManage_Handler + 0x08004b10 BusFault_Handler + 0x08004b12 UsageFault_Handler + 0x08004b14 SVC_Handler + 0x08004b16 DebugMon_Handler + 0x08004b18 PendSV_Handler + 0x08004b1c Default_Handler + 0x08004b1e SCU_0_IRQHandler + 0x08004b20 ERU0_0_IRQHandler + 0x08004b22 ERU0_1_IRQHandler + 0x08004b24 ERU0_2_IRQHandler + 0x08004b26 ERU0_3_IRQHandler + 0x08004b28 ERU1_0_IRQHandler + 0x08004b2a ERU1_1_IRQHandler + 0x08004b2c ERU1_2_IRQHandler + 0x08004b2e ERU1_3_IRQHandler + 0x08004b30 PMU0_0_IRQHandler + 0x08004b32 VADC0_C0_0_IRQHandler + 0x08004b34 VADC0_C0_1_IRQHandler + 0x08004b36 VADC0_C0_2_IRQHandler + 0x08004b38 VADC0_C0_3_IRQHandler + 0x08004b3a VADC0_G0_0_IRQHandler + 0x08004b3c VADC0_G0_1_IRQHandler + 0x08004b3e VADC0_G0_2_IRQHandler + 0x08004b40 VADC0_G0_3_IRQHandler + 0x08004b42 VADC0_G1_0_IRQHandler + 0x08004b44 VADC0_G1_1_IRQHandler + 0x08004b46 VADC0_G1_2_IRQHandler + 0x08004b48 VADC0_G1_3_IRQHandler + 0x08004b4a VADC0_G2_0_IRQHandler + 0x08004b4c VADC0_G2_1_IRQHandler + 0x08004b4e VADC0_G2_2_IRQHandler + 0x08004b50 VADC0_G2_3_IRQHandler + 0x08004b52 VADC0_G3_0_IRQHandler + 0x08004b54 VADC0_G3_1_IRQHandler + 0x08004b56 VADC0_G3_2_IRQHandler + 0x08004b58 VADC0_G3_3_IRQHandler + 0x08004b5a DSD0_0_IRQHandler + 0x08004b5c DSD0_1_IRQHandler + 0x08004b5e DSD0_2_IRQHandler + 0x08004b60 DSD0_3_IRQHandler + 0x08004b62 DSD0_4_IRQHandler + 0x08004b64 DSD0_5_IRQHandler + 0x08004b66 DSD0_6_IRQHandler + 0x08004b68 DSD0_7_IRQHandler + 0x08004b6a DAC0_0_IRQHandler + 0x08004b6c DAC0_1_IRQHandler + 0x08004b6e CCU40_0_IRQHandler + 0x08004b70 CCU40_1_IRQHandler + 0x08004b72 CCU40_2_IRQHandler + 0x08004b74 CCU40_3_IRQHandler + 0x08004b76 CCU41_0_IRQHandler + 0x08004b78 CCU41_1_IRQHandler + 0x08004b7a CCU41_2_IRQHandler + 0x08004b7c CCU41_3_IRQHandler + 0x08004b7e CCU42_0_IRQHandler + 0x08004b80 CCU42_1_IRQHandler + 0x08004b82 CCU42_2_IRQHandler + 0x08004b84 CCU42_3_IRQHandler + 0x08004b86 CCU43_0_IRQHandler + 0x08004b88 CCU43_1_IRQHandler + 0x08004b8a CCU43_2_IRQHandler + 0x08004b8c CCU43_3_IRQHandler + 0x08004b8e CCU80_0_IRQHandler + 0x08004b90 CCU80_1_IRQHandler + 0x08004b92 CCU80_2_IRQHandler + 0x08004b94 CCU80_3_IRQHandler + 0x08004b96 CCU81_0_IRQHandler + 0x08004b98 CCU81_1_IRQHandler + 0x08004b9a CCU81_2_IRQHandler + 0x08004b9c CCU81_3_IRQHandler + 0x08004b9e POSIF0_0_IRQHandler + 0x08004ba0 POSIF0_1_IRQHandler + 0x08004ba2 POSIF1_0_IRQHandler + 0x08004ba4 POSIF1_1_IRQHandler + 0x08004ba6 CAN0_0_IRQHandler + 0x08004ba8 CAN0_1_IRQHandler + 0x08004baa CAN0_2_IRQHandler + 0x08004bac CAN0_3_IRQHandler + 0x08004bae CAN0_4_IRQHandler + 0x08004bb0 CAN0_5_IRQHandler + 0x08004bb2 CAN0_6_IRQHandler + 0x08004bb4 CAN0_7_IRQHandler + 0x08004bb6 USIC0_0_IRQHandler + 0x08004bb8 USIC0_1_IRQHandler + 0x08004bba USIC0_2_IRQHandler + 0x08004bbc USIC0_3_IRQHandler + 0x08004bbe USIC0_4_IRQHandler + 0x08004bc0 USIC0_5_IRQHandler + 0x08004bc2 USIC1_0_IRQHandler + 0x08004bc4 USIC1_1_IRQHandler + 0x08004bc6 USIC1_2_IRQHandler + 0x08004bc8 USIC1_3_IRQHandler + 0x08004bca USIC1_4_IRQHandler + 0x08004bcc USIC1_5_IRQHandler + 0x08004bce USIC2_0_IRQHandler + 0x08004bd0 USIC2_1_IRQHandler + 0x08004bd2 USIC2_2_IRQHandler + 0x08004bd4 USIC2_3_IRQHandler + 0x08004bd6 USIC2_4_IRQHandler + 0x08004bd8 USIC2_5_IRQHandler + 0x08004bda LEDTS0_0_IRQHandler + 0x08004bdc FCE0_0_IRQHandler + 0x08004bde GPDMA0_0_IRQHandler + 0x08004be0 SDMMC0_0_IRQHandler + 0x08004be2 USB0_0_IRQHandler + 0x08004be4 ETH0_0_IRQHandler + 0x08004be6 GPDMA1_0_IRQHandler .text.TimerSet - 0x08004c10 0xc ..\obj\timer.o - 0x08004c10 TimerSet + 0x08004bf0 0xc ..\obj\timer.o + 0x08004bf0 TimerSet .text.TimerInit - 0x08004c1c 0x44 ..\obj\timer.o - 0x08004c1c TimerInit + 0x08004bfc 0x44 ..\obj\timer.o + 0x08004bfc TimerInit .text.TimerGet - 0x08004c60 0xc ..\obj\timer.o - 0x08004c60 TimerGet + 0x08004c40 0xc ..\obj\timer.o + 0x08004c40 TimerGet .text.SysTick_Handler - 0x08004c6c 0x10 ..\obj\timer.o - 0x08004c6c SysTick_Handler - .text.exit 0x08004c7c 0x28 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-exit.o) - 0x08004c7c exit + 0x08004c4c 0x10 ..\obj\timer.o + 0x08004c4c SysTick_Handler + .text.exit 0x08004c5c 0x28 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-exit.o) + 0x08004c5c exit .text.__libc_init_array - 0x08004ca4 0x4c c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-init.o) - 0x08004ca4 __libc_init_array - .text.memset 0x08004cf0 0x10 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-memset.o) - 0x08004cf0 memset - .text._exit 0x08004d00 0x2 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libnosys_s.a(_exit.o) - 0x08004d00 _exit + 0x08004c84 0x4c c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-init.o) + 0x08004c84 __libc_init_array + .text.memset 0x08004cd0 0x10 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-memset.o) + 0x08004cd0 memset + .text._exit 0x08004ce0 0x2 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libnosys_s.a(_exit.o) + 0x08004ce0 _exit *(.init) - *fill* 0x08004d02 0x2 - .init 0x08004d04 0x4 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crti.o - 0x08004d04 _init - .init 0x08004d08 0x8 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtn.o + *fill* 0x08004ce2 0x2 + .init 0x08004ce4 0x4 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crti.o + 0x08004ce4 _init + .init 0x08004ce8 0x8 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtn.o *(.fini) - .fini 0x08004d10 0x4 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crti.o - 0x08004d10 _fini - .fini 0x08004d14 0x8 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtn.o + .fini 0x08004cf0 0x4 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crti.o + 0x08004cf0 _fini + .fini 0x08004cf4 0x8 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtn.o *crtbegin.o(.ctors) *crtbegin?.o(.ctors) *(EXCLUDE_FILE(*crtend.o *crtend?.o) .ctors) @@ -4003,49 +4616,45 @@ LOAD c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none- *(SORT(.dtors.*)) *(.dtors) *(.rodata*) - .rodata.clear_peripheral_gate.7688 - 0x08004d1c 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o - .rodata.clear_peripheral_reset.7567 - 0x08004d2c 0x10 ..\obj\lib\xmclib\src\xmc4_scu.o .rodata.str1.1 - 0x08004d3c 0x2 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-impure.o) - *fill* 0x08004d3e 0x2 + 0x08004cfc 0x2 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-impure.o) + *fill* 0x08004cfe 0x2 .rodata._global_impure_ptr - 0x08004d40 0x4 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-impure.o) - 0x08004d40 _global_impure_ptr + 0x08004d00 0x4 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-impure.o) + 0x08004d00 _global_impure_ptr *(.eh_frame*) - .eh_frame 0x08004d44 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o - .eh_frame 0x08004d44 0x4 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtend.o + .eh_frame 0x08004d04 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o + .eh_frame 0x08004d04 0x4 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtend.o -.glue_7 0x08004d48 0x0 - .glue_7 0x08004d48 0x0 linker stubs +.glue_7 0x08004d08 0x0 + .glue_7 0x08004d08 0x0 linker stubs -.glue_7t 0x08004d48 0x0 - .glue_7t 0x08004d48 0x0 linker stubs +.glue_7t 0x08004d08 0x0 + .glue_7t 0x08004d08 0x0 linker stubs -.vfp11_veneer 0x08004d48 0x0 - .vfp11_veneer 0x08004d48 0x0 linker stubs +.vfp11_veneer 0x08004d08 0x0 + .vfp11_veneer 0x08004d08 0x0 linker stubs -.v4_bx 0x08004d48 0x0 - .v4_bx 0x08004d48 0x0 linker stubs +.v4_bx 0x08004d08 0x0 + .v4_bx 0x08004d08 0x0 linker stubs -.iplt 0x08004d48 0x0 - .iplt 0x08004d48 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o +.iplt 0x08004d08 0x0 + .iplt 0x08004d08 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o .ARM.extab *(.ARM.extab* .gnu.linkonce.armextab.*) - 0x08004d48 __exidx_start = . + 0x08004d08 __exidx_start = . -.ARM.exidx 0x08004d48 0x8 +.ARM.exidx 0x08004d08 0x8 *(.ARM.exidx* .gnu.linkonce.armexidx.*) - .ARM.exidx 0x08004d48 0x8 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu/crt0.o - 0x08004d50 __exidx_end = . - 0x08004d50 __etext = . + .ARM.exidx 0x08004d08 0x8 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu/crt0.o + 0x08004d10 __exidx_end = . + 0x08004d10 __etext = . -.rel.dyn 0x08004d50 0x0 - .rel.iplt 0x08004d50 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o +.rel.dyn 0x08004d10 0x0 + .rel.iplt 0x08004d10 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o -.data 0x20000000 0x68 load address 0x08004d50 +.data 0x20000000 0x68 load address 0x08004d10 0x20000000 __data_start__ = . *(vtable) *(.data*) @@ -4070,49 +4679,48 @@ LOAD c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none- 0x20000068 . = ALIGN (0x4) 0x20000068 __data_end__ = . -.jcr 0x20000068 0x0 load address 0x08004db8 +.jcr 0x20000068 0x0 load address 0x08004d78 .jcr 0x20000068 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o -.igot.plt 0x20000068 0x0 load address 0x08004db8 +.igot.plt 0x20000068 0x0 load address 0x08004d78 .igot.plt 0x20000068 0x0 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o -.no_init 0x20000068 0x14 load address 0x08004db8 +.no_init 0x20000068 0x14 load address 0x08004d78 .no_init 0x20000068 0x14 ..\obj\lib\system_xmc4700.o 0x20000068 SystemCoreClock 0x2000006c g_chipid -.bss 0x2000007c 0x70 load address 0x08004dcc +.bss 0x2000007c 0x6c load address 0x08004d8c 0x2000007c __bss_start__ = . *(.bss*) .bss 0x2000007c 0x1c c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/crtbegin.o - .bss.xcpCtoRxLength.7700 - 0x20000098 0x1 ..\obj\boot.o - .bss.xcpCtoRxInProgress.7701 - 0x20000099 0x1 ..\obj\boot.o - *fill* 0x2000009a 0x2 - .bss.xcpCtoReqPacket.7699 - 0x2000009c 0x41 ..\obj\boot.o - *fill* 0x200000dd 0x3 - .bss.timer_counter_last.7078 - 0x200000e0 0x4 ..\obj\led.o - .bss.led_toggle_state.7077 - 0x200000e4 0x1 ..\obj\led.o - *fill* 0x200000e5 0x3 + .bss.xcpCtoReqPacket.7706 + 0x20000098 0x41 ..\obj\boot.o + .bss.xcpCtoRxLength.7707 + 0x200000d9 0x1 ..\obj\boot.o + .bss.xcpCtoRxInProgress.7708 + 0x200000da 0x1 ..\obj\boot.o + *fill* 0x200000db 0x1 + .bss.timer_counter_last.7074 + 0x200000dc 0x4 ..\obj\led.o + .bss.led_toggle_state.7073 + 0x200000e0 0x1 ..\obj\led.o + *fill* 0x200000e1 0x3 .bss.millisecond_counter - 0x200000e8 0x4 ..\obj\timer.o + 0x200000e4 0x4 ..\obj\timer.o *(COMMON) - 0x200000ec __bss_end__ = . + 0x200000e8 __bss_end__ = . -.heap 0x200000f0 0x0 - 0x200000f0 __end__ = . - 0x200000f0 end = __end__ +.heap 0x200000e8 0x0 + 0x200000e8 __end__ = . + 0x200000e8 end = __end__ *(.heap*) - .heap 0x200000f0 0x0 ..\obj\startup_xmc4700.o - 0x200000f0 __HeapLimit = . + .heap 0x200000e8 0x0 ..\obj\startup_xmc4700.o + 0x200000e8 __HeapLimit = . -.stack_dummy 0x200000f0 0x100 +.stack_dummy 0x200000e8 0x100 *(.stack) - .stack 0x200000f0 0x100 ..\obj\startup_xmc4700.o + .stack 0x200000e8 0x100 ..\obj\startup_xmc4700.o 0x20020000 __StackTop = (ORIGIN (RAM) + LENGTH (RAM)) 0x2001ff00 __StackLimit = (__StackTop - SIZEOF (.stack_dummy)) 0x20020000 PROVIDE (__stack, __StackTop) @@ -4125,6 +4733,8 @@ LOAD ..\obj\lib\xmclib\src\xmc4_flash.o LOAD ..\obj\lib\xmclib\src\xmc4_gpio.o LOAD ..\obj\lib\xmclib\src\xmc4_rtc.o LOAD ..\obj\lib\xmclib\src\xmc4_scu.o +LOAD ..\obj\lib\xmclib\src\xmc_acmp.o +LOAD ..\obj\lib\xmclib\src\xmc_bccu.o LOAD ..\obj\lib\xmclib\src\xmc_can.o LOAD ..\obj\lib\xmclib\src\xmc_ccu4.o LOAD ..\obj\lib\xmclib\src\xmc_ccu8.o @@ -4133,6 +4743,7 @@ LOAD ..\obj\lib\xmclib\src\xmc_dac.o LOAD ..\obj\lib\xmclib\src\xmc_dma.o LOAD ..\obj\lib\xmclib\src\xmc_dsd.o LOAD ..\obj\lib\xmclib\src\xmc_ebu.o +LOAD ..\obj\lib\xmclib\src\xmc_ecat.o LOAD ..\obj\lib\xmclib\src\xmc_eru.o LOAD ..\obj\lib\xmclib\src\xmc_eth_mac.o LOAD ..\obj\lib\xmclib\src\xmc_fce.o @@ -4141,12 +4752,16 @@ LOAD ..\obj\lib\xmclib\src\xmc_hrpwm.o LOAD ..\obj\lib\xmclib\src\xmc_i2c.o LOAD ..\obj\lib\xmclib\src\xmc_i2s.o LOAD ..\obj\lib\xmclib\src\xmc_ledts.o +LOAD ..\obj\lib\xmclib\src\xmc_math.o +LOAD ..\obj\lib\xmclib\src\xmc_pau.o LOAD ..\obj\lib\xmclib\src\xmc_posif.o +LOAD ..\obj\lib\xmclib\src\xmc_prng.o LOAD ..\obj\lib\xmclib\src\xmc_rtc.o LOAD ..\obj\lib\xmclib\src\xmc_sdmmc.o LOAD ..\obj\lib\xmclib\src\xmc_spi.o LOAD ..\obj\lib\xmclib\src\xmc_uart.o LOAD ..\obj\lib\xmclib\src\xmc_usbd.o +LOAD ..\obj\lib\xmclib\src\xmc_usbh.o LOAD ..\obj\lib\xmclib\src\xmc_usic.o LOAD ..\obj\lib\xmclib\src\xmc_vadc.o LOAD ..\obj\lib\xmclib\src\xmc_wdt.o @@ -4225,44 +4840,44 @@ OUTPUT(..\bin\demoprog_xmc4700.elf elf32-littlearm) .comment 0x0000006e 0x6f ..\obj\main.o .comment 0x0000006e 0x6f ..\obj\timer.o -.debug_info 0x00000000 0x6221 - .debug_info 0x00000000 0xc7b ..\obj\boot.o - .debug_info 0x00000c7b 0x449 ..\obj\led.o - .debug_info 0x000010c4 0x99a ..\obj\lib\system_xmc4700.o - .debug_info 0x00001a5e 0x412 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_info 0x00001e70 0x2048 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_info 0x00003eb8 0x38e ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_info 0x00004246 0x8c2 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_info 0x00004b08 0xd78 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_info 0x00005880 0x14f ..\obj\main.o - .debug_info 0x000059cf 0x8d ..\obj\startup_xmc4700.o - .debug_info 0x00005a5c 0x7c5 ..\obj\timer.o +.debug_info 0x00000000 0x64cf + .debug_info 0x00000000 0xc7c ..\obj\boot.o + .debug_info 0x00000c7c 0x449 ..\obj\led.o + .debug_info 0x000010c5 0x943 ..\obj\lib\system_xmc4700.o + .debug_info 0x00001a08 0x412 ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_info 0x00001e1a 0x2311 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_info 0x0000412b 0x38e ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_info 0x000044b9 0x8fd ..\obj\lib\xmclib\src\xmc_uart.o + .debug_info 0x00004db6 0xd78 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_info 0x00005b2e 0x14f ..\obj\main.o + .debug_info 0x00005c7d 0x8d ..\obj\startup_xmc4700.o + .debug_info 0x00005d0a 0x7c5 ..\obj\timer.o -.debug_abbrev 0x00000000 0x130c +.debug_abbrev 0x00000000 0x12f6 .debug_abbrev 0x00000000 0x2e4 ..\obj\boot.o .debug_abbrev 0x000002e4 0x181 ..\obj\led.o .debug_abbrev 0x00000465 0x1c1 ..\obj\lib\system_xmc4700.o .debug_abbrev 0x00000626 0x136 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_abbrev 0x0000075c 0x317 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_abbrev 0x00000a73 0x11e ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_abbrev 0x00000b91 0x265 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_abbrev 0x00000df6 0x279 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_abbrev 0x0000106f 0xa5 ..\obj\main.o - .debug_abbrev 0x00001114 0x14 ..\obj\startup_xmc4700.o - .debug_abbrev 0x00001128 0x1e4 ..\obj\timer.o + .debug_abbrev 0x0000075c 0x301 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_abbrev 0x00000a5d 0x11e ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_abbrev 0x00000b7b 0x265 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_abbrev 0x00000de0 0x279 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_abbrev 0x00001059 0xa5 ..\obj\main.o + .debug_abbrev 0x000010fe 0x14 ..\obj\startup_xmc4700.o + .debug_abbrev 0x00001112 0x1e4 ..\obj\timer.o -.debug_loc 0x00000000 0x18b3 +.debug_loc 0x00000000 0x1930 .debug_loc 0x00000000 0xa7 ..\obj\boot.o .debug_loc 0x000000a7 0xc4 ..\obj\led.o .debug_loc 0x0000016b 0xa8 ..\obj\lib\system_xmc4700.o .debug_loc 0x00000213 0x9d ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_loc 0x000002b0 0xda7 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_loc 0x00001057 0x84 ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_loc 0x000010db 0x24b ..\obj\lib\xmclib\src\xmc_uart.o - .debug_loc 0x00001326 0x533 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_loc 0x00001859 0x5a ..\obj\timer.o + .debug_loc 0x000002b0 0xdf8 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_loc 0x000010a8 0x84 ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_loc 0x0000112c 0x277 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_loc 0x000013a3 0x533 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_loc 0x000018d6 0x5a ..\obj\timer.o -.debug_aranges 0x00000000 0x568 +.debug_aranges 0x00000000 0x610 .debug_aranges 0x00000000 0x48 ..\obj\boot.o .debug_aranges @@ -4272,33 +4887,33 @@ OUTPUT(..\bin\demoprog_xmc4700.elf elf32-littlearm) .debug_aranges 0x000000b8 0x28 ..\obj\lib\xmclib\src\xmc4_gpio.o .debug_aranges - 0x000000e0 0x308 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x000000e0 0x3b0 ..\obj\lib\xmclib\src\xmc4_scu.o .debug_aranges - 0x000003e8 0x28 ..\obj\lib\xmclib\src\xmc_gpio.o + 0x00000490 0x28 ..\obj\lib\xmclib\src\xmc_gpio.o .debug_aranges - 0x00000410 0x50 ..\obj\lib\xmclib\src\xmc_uart.o + 0x000004b8 0x50 ..\obj\lib\xmclib\src\xmc_uart.o .debug_aranges - 0x00000460 0x80 ..\obj\lib\xmclib\src\xmc_usic.o + 0x00000508 0x80 ..\obj\lib\xmclib\src\xmc_usic.o .debug_aranges - 0x000004e0 0x28 ..\obj\main.o + 0x00000588 0x28 ..\obj\main.o .debug_aranges - 0x00000508 0x20 ..\obj\startup_xmc4700.o + 0x000005b0 0x20 ..\obj\startup_xmc4700.o .debug_aranges - 0x00000528 0x40 ..\obj\timer.o + 0x000005d0 0x40 ..\obj\timer.o -.debug_ranges 0x00000000 0x4a8 +.debug_ranges 0x00000000 0x550 .debug_ranges 0x00000000 0x38 ..\obj\boot.o .debug_ranges 0x00000038 0x18 ..\obj\led.o .debug_ranges 0x00000050 0x38 ..\obj\lib\system_xmc4700.o .debug_ranges 0x00000088 0x18 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_ranges 0x000000a0 0x2f8 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_ranges 0x00000398 0x18 ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_ranges 0x000003b0 0x40 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_ranges 0x000003f0 0x70 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_ranges 0x00000460 0x18 ..\obj\main.o - .debug_ranges 0x00000478 0x30 ..\obj\timer.o + .debug_ranges 0x000000a0 0x3a0 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_ranges 0x00000440 0x18 ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_ranges 0x00000458 0x40 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_ranges 0x00000498 0x70 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_ranges 0x00000508 0x18 ..\obj\main.o + .debug_ranges 0x00000520 0x30 ..\obj\timer.o -.debug_macro 0x00000000 0x1b247 +.debug_macro 0x00000000 0x1b1ef .debug_macro 0x00000000 0x208 ..\obj\boot.o .debug_macro 0x00000208 0x892 ..\obj\boot.o .debug_macro 0x00000a9a 0x65 ..\obj\boot.o @@ -4313,89 +4928,89 @@ OUTPUT(..\bin\demoprog_xmc4700.elf elf32-littlearm) .debug_macro 0x00000f88 0x50 ..\obj\boot.o .debug_macro 0x00000fd8 0xe66 ..\obj\boot.o .debug_macro 0x00001e3e 0x16 ..\obj\boot.o - .debug_macro 0x00001e54 0x166f2 ..\obj\boot.o - .debug_macro 0x00018546 0x174 ..\obj\boot.o - .debug_macro 0x000186ba 0x22 ..\obj\boot.o - .debug_macro 0x000186dc 0x52 ..\obj\boot.o - .debug_macro 0x0001872e 0x35 ..\obj\boot.o - .debug_macro 0x00018763 0x9c ..\obj\boot.o - .debug_macro 0x000187ff 0x52 ..\obj\boot.o - .debug_macro 0x00018851 0x1f ..\obj\boot.o - .debug_macro 0x00018870 0x43 ..\obj\boot.o - .debug_macro 0x000188b3 0x20 ..\obj\boot.o - .debug_macro 0x000188d3 0x187 ..\obj\boot.o - .debug_macro 0x00018a5a 0x30d ..\obj\boot.o - .debug_macro 0x00018d67 0x10 ..\obj\boot.o - .debug_macro 0x00018d77 0x35 ..\obj\boot.o - .debug_macro 0x00018dac 0x170 ..\obj\boot.o - .debug_macro 0x00018f1c 0x46 ..\obj\boot.o - .debug_macro 0x00018f62 0x88 ..\obj\boot.o - .debug_macro 0x00018fea 0x2da ..\obj\boot.o - .debug_macro 0x000192c4 0x28 ..\obj\boot.o - .debug_macro 0x000192ec 0x28 ..\obj\boot.o - .debug_macro 0x00019314 0xd4d ..\obj\boot.o - .debug_macro 0x0001a061 0xba ..\obj\boot.o - .debug_macro 0x0001a11b 0x1ec ..\obj\led.o - .debug_macro 0x0001a307 0x22 ..\obj\led.o - .debug_macro 0x0001a329 0x317 ..\obj\lib\system_xmc4700.o - .debug_macro 0x0001a640 0x4c ..\obj\lib\system_xmc4700.o - .debug_macro 0x0001a68c 0x8d ..\obj\lib\system_xmc4700.o - .debug_macro 0x0001a719 0x4a ..\obj\lib\system_xmc4700.o - .debug_macro 0x0001a763 0x1c7 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_macro 0x0001a92a 0x1ef ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_macro 0x0001ab19 0x1bb ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_macro 0x0001acd4 0x1d9 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_macro 0x0001aead 0x1c4 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_macro 0x0001b071 0xeb ..\obj\main.o - .debug_macro 0x0001b15c 0xeb ..\obj\timer.o + .debug_macro 0x00001e54 0x165d5 ..\obj\boot.o + .debug_macro 0x00018429 0x174 ..\obj\boot.o + .debug_macro 0x0001859d 0x22 ..\obj\boot.o + .debug_macro 0x000185bf 0x52 ..\obj\boot.o + .debug_macro 0x00018611 0x35 ..\obj\boot.o + .debug_macro 0x00018646 0x9c ..\obj\boot.o + .debug_macro 0x000186e2 0x52 ..\obj\boot.o + .debug_macro 0x00018734 0x1f ..\obj\boot.o + .debug_macro 0x00018753 0x43 ..\obj\boot.o + .debug_macro 0x00018796 0x20 ..\obj\boot.o + .debug_macro 0x000187b6 0x187 ..\obj\boot.o + .debug_macro 0x0001893d 0x30d ..\obj\boot.o + .debug_macro 0x00018c4a 0x10 ..\obj\boot.o + .debug_macro 0x00018c5a 0x35 ..\obj\boot.o + .debug_macro 0x00018c8f 0x183 ..\obj\boot.o + .debug_macro 0x00018e12 0x46 ..\obj\boot.o + .debug_macro 0x00018e58 0x8b ..\obj\boot.o + .debug_macro 0x00018ee3 0x2ef ..\obj\boot.o + .debug_macro 0x000191d2 0x28 ..\obj\boot.o + .debug_macro 0x000191fa 0x28 ..\obj\boot.o + .debug_macro 0x00019222 0xdc4 ..\obj\boot.o + .debug_macro 0x00019fe6 0xba ..\obj\boot.o + .debug_macro 0x0001a0a0 0x1ec ..\obj\led.o + .debug_macro 0x0001a28c 0x22 ..\obj\led.o + .debug_macro 0x0001a2ae 0x317 ..\obj\lib\system_xmc4700.o + .debug_macro 0x0001a5c5 0x4c ..\obj\lib\system_xmc4700.o + .debug_macro 0x0001a611 0x8d ..\obj\lib\system_xmc4700.o + .debug_macro 0x0001a69e 0x4a ..\obj\lib\system_xmc4700.o + .debug_macro 0x0001a6e8 0x1c7 ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_macro 0x0001a8af 0x212 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_macro 0x0001aac1 0x1bb ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_macro 0x0001ac7c 0x1d9 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_macro 0x0001ae55 0x1c4 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_macro 0x0001b019 0xeb ..\obj\main.o + .debug_macro 0x0001b104 0xeb ..\obj\timer.o -.debug_line 0x00000000 0x2ec4 +.debug_line 0x00000000 0x3072 .debug_line 0x00000000 0x48f ..\obj\boot.o .debug_line 0x0000048f 0x3e0 ..\obj\led.o - .debug_line 0x0000086f 0x3f0 ..\obj\lib\system_xmc4700.o - .debug_line 0x00000c5f 0x398 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_line 0x00000ff7 0xb48 ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_line 0x00001b3f 0x38a ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_line 0x00001ec9 0x450 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_line 0x00002319 0x4e4 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_line 0x000027fd 0x2d4 ..\obj\main.o - .debug_line 0x00002ad1 0xe3 ..\obj\startup_xmc4700.o - .debug_line 0x00002bb4 0x310 ..\obj\timer.o + .debug_line 0x0000086f 0x3e8 ..\obj\lib\system_xmc4700.o + .debug_line 0x00000c57 0x398 ..\obj\lib\xmclib\src\xmc4_gpio.o + .debug_line 0x00000fef 0xcf0 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_line 0x00001cdf 0x38a ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_line 0x00002069 0x45e ..\obj\lib\xmclib\src\xmc_uart.o + .debug_line 0x000024c7 0x4e4 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_line 0x000029ab 0x2d4 ..\obj\main.o + .debug_line 0x00002c7f 0xe3 ..\obj\startup_xmc4700.o + .debug_line 0x00002d62 0x310 ..\obj\timer.o -.debug_str 0x00000000 0x80b8b - .debug_str 0x00000000 0x7c276 ..\obj\boot.o - 0x7c4f0 (size before relaxing) - .debug_str 0x0007c276 0x9c ..\obj\led.o - 0x7b0ed (size before relaxing) - .debug_str 0x0007c312 0xe04 ..\obj\lib\system_xmc4700.o - 0x75a23 (size before relaxing) - .debug_str 0x0007d116 0x8f ..\obj\lib\xmclib\src\xmc4_gpio.o - 0x7b076 (size before relaxing) - .debug_str 0x0007d1a5 0x24f8 ..\obj\lib\xmclib\src\xmc4_scu.o - 0x778ea (size before relaxing) - .debug_str 0x0007f69d 0x7b ..\obj\lib\xmclib\src\xmc_gpio.o - 0x7aef1 (size before relaxing) - .debug_str 0x0007f718 0x608 ..\obj\lib\xmclib\src\xmc_uart.o - 0x76c8d (size before relaxing) - .debug_str 0x0007fd20 0x797 ..\obj\lib\xmclib\src\xmc_usic.o - 0x774ce (size before relaxing) - .debug_str 0x000804b7 0x14 ..\obj\main.o - 0x72358 (size before relaxing) - .debug_str 0x000804cb 0x6c0 ..\obj\timer.o - 0x72a81 (size before relaxing) +.debug_str 0x00000000 0x80fee + .debug_str 0x00000000 0x7c09e ..\obj\boot.o + 0x7c323 (size before relaxing) + .debug_str 0x0007c09e 0x9c ..\obj\led.o + 0x7aee3 (size before relaxing) + .debug_str 0x0007c13a 0xdca ..\obj\lib\system_xmc4700.o + 0x75489 (size before relaxing) + .debug_str 0x0007cf04 0x8f ..\obj\lib\xmclib\src\xmc4_gpio.o + 0x7ae6c (size before relaxing) + .debug_str 0x0007cf93 0x2b53 ..\obj\lib\xmclib\src\xmc4_scu.o + 0x779e4 (size before relaxing) + .debug_str 0x0007fae6 0x7b ..\obj\lib\xmclib\src\xmc_gpio.o + 0x7ace7 (size before relaxing) + .debug_str 0x0007fb61 0x622 ..\obj\lib\xmclib\src\xmc_uart.o + 0x7671d (size before relaxing) + .debug_str 0x00080183 0x797 ..\obj\lib\xmclib\src\xmc_usic.o + 0x76f44 (size before relaxing) + .debug_str 0x0008091a 0x14 ..\obj\main.o + 0x71df8 (size before relaxing) + .debug_str 0x0008092e 0x6c0 ..\obj\timer.o + 0x72521 (size before relaxing) -.debug_frame 0x00000000 0xbf0 +.debug_frame 0x00000000 0xd54 .debug_frame 0x00000000 0xac ..\obj\boot.o .debug_frame 0x000000ac 0x40 ..\obj\led.o .debug_frame 0x000000ec 0x94 ..\obj\lib\system_xmc4700.o .debug_frame 0x00000180 0x50 ..\obj\lib\xmclib\src\xmc4_gpio.o - .debug_frame 0x000001d0 0x6ac ..\obj\lib\xmclib\src\xmc4_scu.o - .debug_frame 0x0000087c 0x48 ..\obj\lib\xmclib\src\xmc_gpio.o - .debug_frame 0x000008c4 0x98 ..\obj\lib\xmclib\src\xmc_uart.o - .debug_frame 0x0000095c 0x158 ..\obj\lib\xmclib\src\xmc_usic.o - .debug_frame 0x00000ab4 0x40 ..\obj\main.o - .debug_frame 0x00000af4 0x68 ..\obj\timer.o - .debug_frame 0x00000b5c 0x28 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-exit.o) - .debug_frame 0x00000b84 0x2c c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-init.o) - .debug_frame 0x00000bb0 0x20 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-memset.o) - .debug_frame 0x00000bd0 0x20 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libnosys_s.a(_exit.o) + .debug_frame 0x000001d0 0x810 ..\obj\lib\xmclib\src\xmc4_scu.o + .debug_frame 0x000009e0 0x48 ..\obj\lib\xmclib\src\xmc_gpio.o + .debug_frame 0x00000a28 0x98 ..\obj\lib\xmclib\src\xmc_uart.o + .debug_frame 0x00000ac0 0x158 ..\obj\lib\xmclib\src\xmc_usic.o + .debug_frame 0x00000c18 0x40 ..\obj\main.o + .debug_frame 0x00000c58 0x68 ..\obj\timer.o + .debug_frame 0x00000cc0 0x28 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-exit.o) + .debug_frame 0x00000ce8 0x2c c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-init.o) + .debug_frame 0x00000d14 0x20 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg_n.a(lib_a-memset.o) + .debug_frame 0x00000d34 0x20 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libnosys_s.a(_exit.o) diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/bin/demoprog_xmc4700.srec b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/bin/demoprog_xmc4700.srec index deaee651..6df8172f 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/bin/demoprog_xmc4700.srec +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/bin/demoprog_xmc4700.srec @@ -1,61 +1,61 @@ S01F00002E2E5C62696E5C64656D6F70726F675F786D63343730302E73726563E9 -S3150800400000000220DD4A00082B4B00082D4B000853 -S315080040102F4B0008314B0008334B00080000000006 -S31508004020000000000000000000000000354B0008FA -S31508004030374B000800000000394B00086D4C00089B -S315080040403F4B0008414B0008434B0008454B00080E -S31508004050474B0008494B00084B4B00084D4B0008DE -S315080040604F4B0008000000000000000000000000A0 -S31508004070514B000800000000534B0008554B000840 -S31508004080574B0008594B00085B4B00085D4B00086E -S315080040905F4B0008614B0008634B0008654B00083E -S315080040A0674B0008694B00086B4B00086D4B00080E -S315080040B06F4B0008714B0008734B0008754B0008DE -S315080040C0774B0008794B00087B4B00087D4B0008AE -S315080040D07F4B0008814B0008834B0008854B00087E -S315080040E0874B0008894B00088B4B00088D4B00084E -S315080040F08F4B0008914B0008934B0008954B00081E -S31508004100974B0008994B00089B4B00089D4B0008ED -S315080041109F4B0008A14B0008A34B0008A54B0008BD -S31508004120A74B0008A94B0008AB4B0008AD4B00088D -S31508004130AF4B0008B14B0008B34B0008B54B00085D -S31508004140B74B0008B94B0008BB4B0008BD4B00082D -S31508004150BF4B0008C14B0008C34B0008C54B0008FD +S3150800400000000220BD4A00080B4B00080D4B0008B3 +S315080040100F4B0008114B0008134B00080000000066 +S31508004020000000000000000000000000154B00081A +S31508004030174B000800000000194B00084D4C0008FB +S315080040401F4B0008214B0008234B0008254B00088E +S31508004050274B0008294B00082B4B00082D4B00085E +S315080040602F4B0008000000000000000000000000C0 +S31508004070314B000800000000334B0008354B0008A0 +S31508004080374B0008394B00083B4B00083D4B0008EE +S315080040903F4B0008414B0008434B0008454B0008BE +S315080040A0474B0008494B00084B4B00084D4B00088E +S315080040B04F4B0008514B0008534B0008554B00085E +S315080040C0574B0008594B00085B4B00085D4B00082E +S315080040D05F4B0008614B0008634B0008654B0008FE +S315080040E0674B0008694B00086B4B00086D4B0008CE +S315080040F06F4B0008714B0008734B0008754B00089E +S31508004100774B0008794B00087B4B00087D4B00086D +S315080041107F4B0008814B0008834B0008854B00083D +S31508004120874B0008894B00088B4B00088D4B00080D +S315080041308F4B0008914B0008934B0008954B0008DD +S31508004140974B0008994B00089B4B00089D4B0008AD +S315080041509F4B0008A14B0008A34B0008A54B00087D S315080041600000000000000000000000000000000041 -S31508004170C74B0008C94B0008CB4B0008CD4B0008BD -S31508004180CF4B0008D14B0008D34B0008D54B00088D -S31508004190D74B0008D94B0008DB4B0008DD4B00085D -S315080041A0DF4B0008E14B0008E34B0008E54B00082D -S315080041B0E74B0008E94B0008EB4B0008ED4B0008FD -S315080041C0EF4B0008F14B0008F34B0008F54B0008CD -S315080041D0F74B0008F94B0008FB4B000800000000ED -S315080041E0FD4B0008FF4B0008014C0008034C000873 -S315080041F0054C000800000000074C000800000000FD +S31508004170A74B0008A94B0008AB4B0008AD4B00083D +S31508004180AF4B0008B14B0008B34B0008B54B00080D +S31508004190B74B0008B94B0008BB4B0008BD4B0008DD +S315080041A0BF4B0008C14B0008C34B0008C54B0008AD +S315080041B0C74B0008C94B0008CB4B0008CD4B00087D +S315080041C0CF4B0008D14B0008D34B0008D54B00084D +S315080041D0D74B0008D94B0008DB4B0008000000004D +S315080041E0DD4B0008DF4B0008E14B0008E34B0008F5 +S315080041F0E54B000800000000E74B0008000000003F S31508004200EE11AA5510B5054C237833B9044B13B1F2 S315080042100448AFF300800123237010BD7C00002002 -S3150800422000000000444D0008084B10B51BB10849B2 +S3150800422000000000044D0008084B10B51BB10849F2 S315080042300848AFF300800848036803B910BD074B68 S31508004240002BFBD0BDE81040184700BF0000000057 -S3150800425080000020444D000868000020000000008F +S3150800425080000020044D00086800002000000000CF S31508004260154B002B08BF134B9D46A3F5803A00213A -S315080042708B460F461348144A121A00F039FD0F4BA5 +S315080042708B460F461348144A121A00F029FD0F4BB5 S31508004280002B00D098470E4B002B00D098470020F3 S31508004290002104000D000D48002802D00C48AFF399 -S315080042A0008000F0FFFC2000290000F00DFC00F063 -S315080042B0E5FC00BF00000800000002200000000026 -S315080042C0000000007C000020EC0000200000000038 +S315080042A0008000F0EFFC2000290000F0FDFB00F084 +S315080042B0D5FC00BF00000800000002200000000036 +S315080042C0000000007C000020E8000020000000003C S315080042D0000000002DE9F0438BB04FF461430193D1 S315080042E008238DF808308DF8093001258DF80A5015 S315080042F010278DF80B700026ADF80C601C4C01A930 -S31508004300204600F0B9FA8DF81C6008954FF00209AE +S31508004300204600F0A7FA8DF81C6008954FF00209C0 S315080043108DF82490DFF85C8007AA0421404600F057 -S3150800432025FA90238DF8103005958DF818900DEB29 -S3150800433007020521404600F019FAE36923F007034E -S315080043402B43E3612B4604223946204600F01AFB2C -S315080043502B4604223146204600F02CFB236C23F022 +S3150800432013FA90238DF8103005958DF818900DEB3B +S3150800433007020521404600F007FAE36923F0070360 +S315080043402B43E3612B4604223946204600F00AFB3C +S315080043502B4604223146204600F01CFB236C23F032 S315080043600F0343EA090323640BB0BDE8F08300BFDB S315080043700000034000810248074BD3F8143113F0BC -S31508004380080F07D110B50446034800F0A9FA2070B3 +S31508004380080F07D110B50446034800F099FA2070C3 S31508004390012010BD002070470000034008B5FFF754 S315080043A099FF08BDBFF34F8F0549CA6802F4E0625A S315080043B0044B1343CB60BFF34F8F00BFFDE700BF2D @@ -65,14 +65,14 @@ S315080043E00022134B1A7008BD114B1B7801330F4876 S315080043F01844FFF7C1FF012814D10D4A1378013379 S31508004400DBB21370094A127893420BD10022064B8D S315080044101A70064B5B78FF2B04D1044B9B780BB9BB -S31508004420FFF7C0FF08BD00BF990000209C000020D0 -S315080044309800002008B5FFF7C7FF08BD10B5054C62 -S3150800444080220821204600F0FFF94FF08073636050 -S3150800445010BD00BF0085024808B500F001FC0D4BF1 +S31508004420FFF7C0FF08BD00BFDA0000209800002093 +S31508004430D900002008B5FFF7C7FF08BD10B5054C21 +S3150800444080220821204600F0EDF94FF08073636062 +S3150800445010BD00BF0085024808B500F0F1FB0D4B02 S315080044601B68C31AB3F5FA7F13D30B4B1B783BB9FA S315080044700122094B1A704FF48072084B5A6006E005 S315080044800022054B1A704FF08072044B5A60014B9C -S31508004490186008BDE0000020E400002000850248FE +S31508004490186008BDDC000020E00000200085024806 S315080044A082B00023019303E000BF019B013301930F S315080044B0019B8342F8D302B0704700BF72B60D4B1A S315080044C00D4A9A60BFF34F8F62B6D3F8882042F43C @@ -88,96 +88,96 @@ S31508004550022208E00C4B9B6803F07F030133B0FB93 S31508004560F3F200E0094A0749C868C0B20130B2FB55 S31508004570F0F3086900F001000130B3FBF0F0044BDA S31508004580186010BD004600501047005000366E01F6 -S315080045906800002070B55F4B9A6842F04D029A6039 -S315080045A04D22DA60A0331B6813F0010F09D15A4A6D -S315080045B0536843F001035360574B1B6813F0010F10 -S315080045C0FAD0564B1B6813F4007F08D0534A9368F9 -S315080045D043F40073936041F64C50FFF761FF504C6B -S315080045E0636843F40023636040F6C410FFF758FF7E -S315080045F0636823F4803323F002036360494B5B68E6 -S3150800460013F0300F24D0103C636823F03003636046 -S31508004610FFF776FF444BA3FB00231B0D013B6268A3 -S3150800462042EA034363603E4BDA6822F00102DA602D -S315080046305A6822F400325A60394B1B6803F46073D7 -S31508004640B3F5607FF8D1334A936823F0010393608A -S31508004650334B5A6842F001025A605A6842F0100217 -S315080046605A60324A9A605A6842F040025A605A685A -S3150800467022F010025A605A6842F480225A60284B87 -S315080046801B6813F0040FFAD0254A536823F0010378 -S315080046905360234B1B6813F0010FFAD11D4A936828 -S315080046A023F004039360224C4FF00113E3600026C5 -S315080046B066612661266266620323E3611D4BA36178 -S315080046C01D4BA362164D6B6823F040036B601B4BB2 -S315080046D0AB604FF41660FFF7E3FE194BAB604FF47F -S315080046E06160FFF7DDFE174BAB604FF49650FFF79E -S315080046F0D7FE154BAB6041F27070FFF7D1FE134B36 -S31508004700AB604FF4E150FFF7CBFE6660FFF7FCFEA7 -S3150800471070BD00BF60410050004200500044005088 -S3150800472010470050004700506BCA5F6B002F0B0103 -S31508004730004600500500010003002001002F050176 -S31508004740002F0301002F0201002F0101002F000195 -S3150800475010B54FF00053044C0FCB84E80F00FFF759 -S31508004760ADFEFFF717FF10BD6C000020F0B48B08F4 -S315080047701F1D50F8276001F00305ED00F824AC4032 -S3150800478026EA040440F82740466F4F000324BC403D -S3150800479026EA04044467194CA04203D004F5807441 -S315080047A0A04207D1046E012606FA01F124EA0101A6 -S315080047B0016617E054688C404460CC08103450F801 -S315080047C0247001F00701890007268E4027EA0606AD -S315080047D040F8246050F82470167A06FA01F1394335 -S315080047E040F82410043350F82340117801FA05F2F2 -S315080047F0224340F82320F0BC704700BF008E0248D1 -S31508004800020F20F07040034B53F822201368184318 -S31508004810106070472C4D0008034B1868034B5B6902 -S3150800482003F00103D8407047680000200046005096 -S31508004830020F20F07040034B53F8222013681843E8 -S31508004840106070471C4D000830B48B08043350F8CC -S31508004850235001F00301C900F8248C4025EA04041A -S3150800486040F8234050F823408A4044EA020140F8C1 -S31508004870231030BC704700BF70B505460E4600F0E1 -S31508004880E1F8F47904B9102422463168284600F084 -S3150800489033F8B379013B64080134240244EA43033C -S315080048A043F00103EB633379013B1B0643F4817341 -S315080048B06B6373792BB16A6B013B42EA03436B6303 -S315080048C005E06A6B3379013B42EA03436B634FF4B5 -S315080048D0A063AB634FF0FF33EB6433892B6470BD81 -S315080048E0D0F80C3113F0E06F02D1406D80B27047FA -S315080048F0D0F81C0180B2704763293BD9002A3BD007 -S315080049002DE9F04115460C460646FFF785FF1B497B -S31508004910A1FB00377F09A1FB0431480940F2FF3E9D -S315080049204FF0010CE046714611E007FB01F300FB6E -S3150800493005F2B3FBF2F39C0AC3F30903B4F5806FDF -S3150800494004D29E4502D99E46A446884601390029C6 -S31508004950EBD148F4004333617269094B1340013DBA -S3150800496043EA85230CF1FF3C43EA0C4373610020BC -S31508004970BDE8F08101207047012070471F85EB5183 -S31508004980EF8000FC30B4D0F8084124F0E064C0F8A9 -S315080049900841D0F80851064C2C4041EA032343EA63 -S315080049A0026244EA0203C0F8083130BC704700BF0F -S315080049B0C0C0FFF830B4D0F80C4124F0E064C0F869 -S315080049C00C41D0F80C51074C2C4041EA032343EA2A -S315080049D0026244EA020343F08053C0F80C3130BC4B -S315080049E0704700BFC0C0FFEF10B5114B984208D101 -S315080049F04FF40060FFF71CFF4FF40060FFF700FF5D -S31508004A0010BD0C4B984207D10B4C2046FFF710FF00 -S31508004A102046FFF7F5FE10BD084B984206D1084C14 -S31508004A202046FFF705FF2046FFF7EAFE10BD00BF48 -S31508004A3008000340080002488000001008400248A9 -S31508004A400001001010B50446154B984203D003F533 -S31508004A500073984203D11348FFF7C6FF14E0124BC0 -S31508004A60984203D003F50073984203D10F48FFF725 -S31508004A70BBFF09E00E4B984203D003F5007398423A -S31508004A8002D10C48FFF7B0FF0323E360E36813F095 -S31508004A90010FFBD0236C23F00F03236410BD00BF66 -S31508004AA000000340080003400000024808000248CE -S31508004AB0004002480840024808B5FFF725FDFFF701 -S31508004AC0BDFC00F0ABF808BD08B5FFF7F5FFFFF72A -S31508004AD065FCFFF7C1FCFFF7ADFCFAE707498D4611 -S31508004AE00749084A084B9A42BEBF51F8040B42F8D8 -S31508004AF0040BF8E7054880470548004700000220F0 -S31508004B00504D0008000000206800002051470008AA -S31508004B10614200083C493D4A002301E041F8043B54 -S31508004B209142FBD3FFF7D0FFFEE7FEE7FEE7FEE77D +S315080045906800002070B5574B1B6813F0010F09D14E +S315080045A0544A536843F001035360524B1B6813F097 +S315080045B0010FFAD0504B1B6813F4007F08D04E4AFF +S315080045C0936843F40073936041F64C50FFF768FF15 +S315080045D04A4C636843F40023636040F6C410FFF74F +S315080045E05FFF636823F4803323F002036360444B60 +S315080045F05B6813F0300F21D0103C636823F47023F6 +S3150800460023F030036360FFF77BFF3E4BA3FB0023D9 +S315080046101B0D013B626842EA03436360374BDA6865 +S3150800462022F00102DA605A6822F400325A60334BEB +S315080046301B6803F46073B3F5607FF8D12F4B5A6893 +S3150800464042F001025A605A6842F010025A602E4A35 +S315080046509A605A6842F040025A605A6822F010027C +S315080046605A605A6842F480225A60244B1B6813F039 +S31508004670040FFAD0214A536823F0010353601F4BF5 +S315080046801B6813F0010FFAD1204C4FF00113E360B9 +S31508004690002666612661266266620323E3611C4B77 +S315080046A0A3611C4BA362154D6B6823F040036B6036 +S315080046B0194BAB604FF41660FFF7F2FE174BAB6071 +S315080046C04FF46160FFF7ECFE154BAB604FF4965064 +S315080046D0FFF7E6FE134BAB6041F27070FFF7E0FEA2 +S315080046E0114BAB604FF4E150FFF7DAFE6660FFF757 +S315080046F00BFF70BD004200500044005010470050A8 +S31508004700004700506BCA5F6B002F0B010046005034 +S315080047100500010003002001002F0501002F0301F9 +S31508004720002F0201002F0101002F000110B54FF0E4 +S315080047300053044C0FCB84E80F00FFF7BFFEFFF7CA +S3150800474029FF10BD6C000020F0B48B081F1D50F81F +S31508004750276001F00305ED00F824AC4026EA0404BE +S3150800476040F82740466F4F000324BC4026EA04045D +S315080047704467194CA04203D004F58074A04207D1BF +S31508004780046E012606FA01F124EA0101016617E022 +S3150800479054688C404460CC08103450F8247001F0FA +S315080047A00701890007268E4027EA060640F8246096 +S315080047B050F82470167A06FA01F1394340F82410A5 +S315080047C0043350F82340117801FA05F2224340F8E1 +S315080047D02320F0BC704700BF008E0248030F20F06C +S315080047E0704003EB43039A00014BD050704700BF5B +S315080047F014440050034B1868034B5B6903F001032C +S31508004800D84070476800002000460050030F20F08B +S31508004810704003EB43039A00014BD050704700BF2A +S315080048204846005030B48B08043350F8235001F042 +S315080048300301C900F8248C4025EA040440F8234003 +S3150800484050F823408A4044EA020140F8231030BC5D +S31508004850704700BF70B505460E4600F0E3F8F479D8 +S3150800486004B9102422463168284600F035F8B37991 +S31508004870013B64080134240244EA430343F4403309 +S3150800488043F00103EB633379013B1B0643F4817361 +S315080048906B6373792BB16A6B013B42EA03436B6323 +S315080048A005E06A6B3379013B42EA03436B634FF4D5 +S315080048B0A063AB634FF0FF33EB6433892B6470BDA1 +S315080048C0D0F80C3113F0E06F02D1406D80B270471A +S315080048D0D0F81C0180B2704763293BD9002A3BD027 +S315080048E02DE9F04115460C460646FFF783FF1B499E +S315080048F0A1FB00377F09A1FB0431480940F2FF3EBE +S315080049004FF0010CE046714611E007FB01F300FB8E +S3150800491005F2B3FBF2F39C0AC3F30903B4F5806FFF +S3150800492004D29E4502D99E46A446884601390029E6 +S31508004930EBD148F4004333617269094B1340013DDA +S3150800494043EA85230CF1FF3C43EA0C4373610020DC +S31508004950BDE8F08101207047012070471F85EB51A3 +S31508004960EF8000FC30B4D0F8084124F0E064C0F8C9 +S315080049700841D0F80851064C2C4041EA032343EA83 +S31508004980026244EA0203C0F8083130BC704700BF2F +S31508004990C0C0FFF830B4D0F80C4124F0E064C0F889 +S315080049A00C41D0F80C51074C2C4041EA032343EA4A +S315080049B0026244EA020343F08053C0F80C3130BC6B +S315080049C0704700BFC0C0FFEF10B5114B984208D121 +S315080049D04FF40060FFF71AFF4FF40060FFF7FEFE82 +S315080049E010BD0C4B984207D10B4C2046FFF70EFF23 +S315080049F02046FFF7F3FE10BD084B984206D1084C37 +S31508004A002046FFF703FF2046FFF7E8FE10BD00BF6C +S31508004A1008000340080002488000001008400248C9 +S31508004A200001001010B50446154B984203D003F553 +S31508004A300073984203D11348FFF7C6FF14E0124BE0 +S31508004A40984203D003F50073984203D10F48FFF745 +S31508004A50BBFF09E00E4B984203D003F5007398425A +S31508004A6002D10C48FFF7B0FF0323E360E36813F0B5 +S31508004A70010FFBD0236C23F00F03236410BD00BF86 +S31508004A8000000340080003400000024808000248EE +S31508004A90004002480840024808B5FFF735FDFFF711 +S31508004AA0CDFC00F0ABF808BD08B5FFF7F5FFFFF73A +S31508004AB075FCFFF7D1FCFFF7BDFCFAE707498D4601 +S31508004AC00749084A084B9A42BEBF51F8040B42F8F8 +S31508004AD0040BF8E705488047054800470000022010 +S31508004AE0104D000800000020680000202D4700082F +S31508004AF0614200083C493D4A002301E041F8043B75 +S31508004B009142FBD3FFF7D0FFFEE7FEE7FEE7FEE79D +S31508004B10FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE75F +S31508004B20FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE74F S31508004B30FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE73F S31508004B40FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE72F S31508004B50FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE71F @@ -189,37 +189,33 @@ S31508004BA0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7CF S31508004BB0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7BF S31508004BC0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7AF S31508004BD0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE79F -S31508004BE0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE78F -S31508004BF0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE77F -S31508004C00FEE7FEE7FEE7FEE77C000020EC0000205A -S31508004C10014B1860704700BFE800002008B50C4B30 -S31508004C201B680C4AA2FB03239B09013BB3F1807F57 -S31508004C3009D2094A5360FC21084B83F82310002344 -S31508004C409360072313600020FFF7E2FF08BD00BF4B -S31508004C5068000020D34D621010E000E000ED00E08F -S31508004C60014B1868704700BFE8000020024A136825 -S31508004C7001331360704700BFE800002008B5074BF2 -S31508004C80044613B10021AFF30080054B1868836A08 -S31508004C9003B19847204600F033F800BF0000000033 -S31508004CA0404D000870B50E4B0E4CE41AA4100025B2 -S31508004CB01E46A54204D056F8253098470135F8E730 -S31508004CC000F020F8084C094BE41AA41000251E46EB -S31508004CD0A54204D056F8253098470135F8E770BD47 -S31508004CE060000020600000206400002060000020B2 -S31508004CF002440346934202D003F8011BFAE77047C1 -S31508004D00FEE70000F8B500BFF8BC08BC9E46704731 -S31508004D10F8B500BFF8BC08BC9E4670474846005028 -S31508004D2054460050604600506C46005014440050EB -S31508004D30204400502C4400503844005043000000E2 -S30D08004D4000000020000000003D -S30D08004D4818F5FF7F01000000C9 +S31508004BE0FEE7FEE7FEE7FEE77C000020E80000207F +S31508004BF0014B1860704700BFE400002008B50C4B55 +S31508004C001B680C4AA2FB03239B09013BB3F1807F77 +S31508004C1009D2094A5360FC21084B83F82310002364 +S31508004C209360072313600020FFF7E2FF08BD00BF6B +S31508004C3068000020D34D621010E000E000ED00E0AF +S31508004C40014B1868704700BFE4000020024A136849 +S31508004C5001331360704700BFE400002008B5074B16 +S31508004C60044613B10021AFF30080054B1868836A28 +S31508004C7003B19847204600F033F800BF0000000053 +S31508004C80004D000870B50E4B0E4CE41AA410002512 +S31508004C901E46A54204D056F8253098470135F8E750 +S31508004CA000F020F8084C094BE41AA41000251E460B +S31508004CB0A54204D056F8253098470135F8E770BD67 +S31508004CC060000020600000206400002060000020D2 +S31508004CD002440346934202D003F8011BFAE77047E1 +S31508004CE0FEE70000F8B500BFF8BC08BC9E46704752 +S31508004CF0F8B500BFF8BC08BC9E46704743000000E4 +S30D08004D0000000020000000007D +S30D08004D0858F5FF7F01000000C9 +S31508004D100000000000000000000000000000000085 +S31508004D200000000000000000000000000000000075 +S31508004D30FC4C000800000000000000000000000015 +S31508004D400000000000000000000000000000000055 S31508004D500000000000000000000000000000000045 S31508004D600000000000000000000000000000000035 -S31508004D703C4D000800000000000000000000000094 -S31508004D800000000000000000000000000000000015 -S31508004D900000000000000000000000000000000005 -S31508004DA000000000000000000000000000000000F5 -S30D08004DB029420008054200082B -S31508004DB800000000000000000000000000000000DD -S30908004DC800000000D9 +S30D08004D7029420008054200086B +S31508004D78000000000000000000000000000000001D +S30908004D880000000019 S70508004000B2 diff --git a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/ide/xmc4700.ebp b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/ide/xmc4700.ebp index b877627c..6e153fe8 100644 --- a/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/ide/xmc4700.ebp +++ b/Target/Demo/ARMCM4_XMC4_XCM4700_Relax_Kit_GCC/Prog/ide/xmc4700.ebp @@ -124,6 +124,12 @@ + + + + @@ -157,6 +163,12 @@ + + + + @@ -193,9 +205,18 @@ + + + + + + @@ -217,6 +238,9 @@ + + @@ -249,6 +273,14 @@