From 2516c8636fee147e9d034b9bc6c46ff482067bcd Mon Sep 17 00:00:00 2001 From: rtel Date: Mon, 9 May 2016 15:55:51 +0000 Subject: [PATCH] Update the Microblaze hardware design and BSP to the latest IP and tool versions. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2456 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- .../BSP/.cproject | 4 +- .../BSP/.project | 2 +- .../BSP/Makefile | 4 +- .../BSP/microblaze_0/include/xparameters.h | 219 +- .../{bram_v4_0 => bram_v4_1}/src/Makefile | 0 .../{bram_v4_0 => bram_v4_1}/src/xbram.c | 9 +- .../{bram_v4_0 => bram_v4_1}/src/xbram.h | 14 +- .../{bram_v4_0 => bram_v4_1}/src/xbram_g.c | 6 +- .../{bram_v4_0 => bram_v4_1}/src/xbram_hw.h | 5 +- .../{bram_v4_0 => bram_v4_1}/src/xbram_intr.c | 5 +- .../src/xbram_selftest.c | 5 +- .../src/xbram_sinit.c | 5 +- .../{cpu_v2_2 => cpu_v2_4}/src/Makefile | 4 +- .../libsrc/{cpu_v2_2 => cpu_v2_4}/src/fsl.h | 4 +- .../libsrc/{cpu_v2_2 => cpu_v2_4}/src/xio.c | 3 + .../libsrc/{cpu_v2_2 => cpu_v2_4}/src/xio.h | 10 + .../src/Makefile | 7 +- .../src/xemaclite.c | 36 +- .../src/xemaclite.h | 17 +- .../src/xemaclite_g.c | 6 +- .../src/xemaclite_i.h | 7 +- .../src/xemaclite_intr.c | 10 +- .../src/xemaclite_l.c | 33 +- .../src/xemaclite_l.h | 10 +- .../src/xemaclite_selftest.c | 22 +- .../src/xemaclite_sinit.c | 3 + .../{gpio_v4_0 => gpio_v4_1}/src/Makefile | 0 .../{gpio_v4_0 => gpio_v4_1}/src/xgpio.c | 23 +- .../{gpio_v4_0 => gpio_v4_1}/src/xgpio.h | 10 +- .../src/xgpio_extra.c | 13 +- .../{gpio_v4_0 => gpio_v4_1}/src/xgpio_g.c | 6 +- .../{gpio_v4_0 => gpio_v4_1}/src/xgpio_i.h | 5 +- .../{gpio_v4_0 => gpio_v4_1}/src/xgpio_intr.c | 11 +- .../{gpio_v4_0 => gpio_v4_1}/src/xgpio_l.h | 41 +- .../src/xgpio_selftest.c | 3 + .../src/xgpio_sinit.c | 9 + .../libsrc/intc_v3_2/src/Makefile | 30 - .../microblaze_0/libsrc/intc_v3_2/src/xintc.c | 1078 --- .../microblaze_0/libsrc/intc_v3_2/src/xintc.h | 363 - .../libsrc/intc_v3_2/src/xintc_g.c | 78 - .../libsrc/intc_v3_2/src/xintc_intr.c | 173 - .../libsrc/intc_v3_2/src/xintc_l.c | 662 -- .../libsrc/intc_v3_2/src/xintc_l.h | 327 - .../libsrc/intc_v3_2/src/xintc_options.c | 146 - .../libsrc/intc_v3_2/src/xintc_selftest.c | 252 - .../mig_7series_v2_0/src/xmig_7series.h | 4 + .../src/microblaze_disable_dcache.S | 68 - .../src/profile/_profile_timer_hw.c | 360 - .../libsrc/standalone_v4_2/src/xdebug.h | 59 - .../src/Makefile | 11 +- .../src/_exit.c | 11 +- .../src/bspconfig.h | 6 +- .../src/changelog.txt | 170 +- .../src/config.make | 0 .../src/errno.c | 6 +- .../src/fcntl.c | 4 +- .../src/fsl.h | 9 +- .../src/hw_exception_handler.S | 507 +- .../libsrc/standalone_v5_4/src/inbyte.c | 14 + .../src/mb_interface.h | 123 +- .../src/microblaze_disable_dcache.S} | 81 +- .../src/microblaze_disable_exceptions.S | 20 +- .../src/microblaze_disable_icache.S | 30 +- .../src/microblaze_disable_interrupts.S | 30 +- .../src/microblaze_enable_dcache.S | 32 +- .../src/microblaze_enable_exceptions.S | 18 +- .../src/microblaze_enable_icache.S | 29 +- .../src/microblaze_enable_interrupts.S | 32 +- .../src/microblaze_exception_handler.c | 2 +- .../src/microblaze_exceptions_g.h | 11 +- .../src/microblaze_exceptions_i.h | 24 +- .../src/microblaze_flush_cache_ext.S | 12 +- .../src/microblaze_flush_cache_ext_range.S | 12 +- .../src/microblaze_flush_dcache.S | 31 +- .../src/microblaze_flush_dcache_range.S | 46 +- .../src/microblaze_init_dcache_range.S | 32 +- .../src/microblaze_init_icache_range.S | 32 +- .../src/microblaze_interrupt_handler.c | 6 +- .../src/microblaze_interrupts_g.c | 12 +- .../src/microblaze_interrupts_i.h | 2 +- .../src/microblaze_invalidate_cache_ext.S | 16 +- .../microblaze_invalidate_cache_ext_range.S | 10 +- .../src/microblaze_invalidate_dcache.S | 36 +- .../src/microblaze_invalidate_dcache_range.S | 54 +- .../src/microblaze_invalidate_icache.S | 30 +- .../src/microblaze_invalidate_icache_range.S | 36 +- .../src/microblaze_scrub.S | 5 +- .../src/microblaze_sleep.c | 6 +- .../src/microblaze_sleep.h | 4 +- .../src/microblaze_update_dcache.S | 13 +- .../src/microblaze_update_icache.S | 16 +- .../libsrc/standalone_v5_4/src/outbyte.c | 15 + .../libsrc/standalone_v5_4/src/print.c | 32 + .../src/profile/Makefile | 13 +- .../src/profile/_profile_clean.c | 6 +- .../src/profile/_profile_init.c | 56 +- .../src/profile/_profile_timer_hw.c | 387 + .../src/profile/_profile_timer_hw.h | 206 +- .../src/profile/dummy.S | 23 +- .../src/profile/mblaze_nt_types.h | 3 +- .../src/profile/profile.h | 71 +- .../src/profile/profile_cg.c | 93 +- .../src/profile/profile_config.h | 13 +- .../src/profile/profile_hist.c | 18 +- .../src/profile/profile_mcount_arm.S | 3 +- .../src/profile/profile_mcount_mb.S | 19 +- .../src/profile/profile_mcount_ppc.S | 14 +- .../src/pvr.c | 2 +- .../src/pvr.h | 3 +- .../src/xbasic_types.h | 8 +- .../libsrc/standalone_v5_4/src/xdebug.h | 32 + .../src/xenv.h | 3 +- .../src/xenv_standalone.h | 21 +- .../src/xil_assert.c | 14 +- .../src/xil_assert.h | 18 +- .../src/xil_cache.c | 4 +- .../src/xil_cache.h | 26 +- .../src/xil_cache_vxworks.h | 3 +- .../src/xil_exception.c | 16 +- .../src/xil_exception.h | 28 +- .../src/xil_hal.h | 3 +- .../src/xil_io.c | 33 +- .../src/xil_io.h | 115 +- .../src/xil_macroback.h | 2 +- .../src/xil_misc_psreset_api.c | 86 +- .../src/xil_misc_psreset_api.h | 158 +- .../libsrc/standalone_v5_4/src/xil_printf.c | 360 + .../src/xil_printf.h | 34 +- .../src/xil_testcache.c | 212 +- .../src/xil_testcache.h | 12 +- .../src/xil_testio.c | 112 +- .../src/xil_testio.h | 8 +- .../src/xil_testmem.c | 548 +- .../src/xil_testmem.h | 22 +- .../src/xil_types.h | 48 +- .../src/xplatform_info.c} | 93 +- .../src/xplatform_info.h} | 57 +- .../src/xstatus.h | 4 +- .../libsrc/tmrctr_v3_0/src/Makefile | 28 - .../libsrc/tmrctr_v3_0/src/xtmrctr.c | 522 -- .../libsrc/tmrctr_v3_0/src/xtmrctr.h | 301 - .../libsrc/tmrctr_v3_0/src/xtmrctr_g.c | 55 - .../libsrc/tmrctr_v3_0/src/xtmrctr_intr.c | 230 - .../libsrc/tmrctr_v3_0/src/xtmrctr_l.c | 76 - .../libsrc/tmrctr_v3_0/src/xtmrctr_l.h | 426 -- .../libsrc/tmrctr_v3_0/src/xtmrctr_options.c | 214 - .../libsrc/tmrctr_v3_0/src/xtmrctr_selftest.c | 163 - .../src/Makefile | 0 .../src/xuartlite.c | 33 +- .../src/xuartlite.h | 17 +- .../src/xuartlite_g.c | 6 +- .../src/xuartlite_i.h | 5 +- .../src/xuartlite_intr.c | 5 +- .../src/xuartlite_l.c | 12 +- .../src/xuartlite_l.h | 12 +- .../src/xuartlite_selftest.c | 5 +- .../src/xuartlite_sinit.c | 5 +- .../src/xuartlite_stats.c | 5 +- .../BSP/system.mss | 31 +- .../Hardware/.project | 35 +- .../Hardware/base_microblaze_design.hwh | 6575 ----------------- .../Hardware/base_microblaze_design_bd.tcl | 360 - .../base_microblaze_design_wrapper.mmi | 334 - .../Hardware/sysdef.xml | 14 - .../Hardware/system.hdf | Bin 789176 -> 66345 bytes 165 files changed, 3280 insertions(+), 14998 deletions(-) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{bram_v4_0 => bram_v4_1}/src/Makefile (100%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{bram_v4_0 => bram_v4_1}/src/xbram.c (95%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{bram_v4_0 => bram_v4_1}/src/xbram.h (95%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{bram_v4_0 => bram_v4_1}/src/xbram_g.c (94%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{bram_v4_0 => bram_v4_1}/src/xbram_hw.h (99%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{bram_v4_0 => bram_v4_1}/src/xbram_intr.c (98%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{bram_v4_0 => bram_v4_1}/src/xbram_selftest.c (99%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{bram_v4_0 => bram_v4_1}/src/xbram_sinit.c (97%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{cpu_v2_2 => cpu_v2_4}/src/Makefile (87%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{cpu_v2_2 => cpu_v2_4}/src/fsl.h (99%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{cpu_v2_2 => cpu_v2_4}/src/xio.c (99%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{cpu_v2_2 => cpu_v2_4}/src/xio.h (95%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{emaclite_v4_0 => emaclite_v4_2}/src/Makefile (84%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{emaclite_v4_0 => emaclite_v4_2}/src/xemaclite.c (96%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{emaclite_v4_0 => emaclite_v4_2}/src/xemaclite.h (96%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{emaclite_v4_0 => emaclite_v4_2}/src/xemaclite_g.c (90%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{emaclite_v4_0 => emaclite_v4_2}/src/xemaclite_i.h (96%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{emaclite_v4_0 => emaclite_v4_2}/src/xemaclite_intr.c (98%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{emaclite_v4_0 => emaclite_v4_2}/src/xemaclite_l.c (91%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{emaclite_v4_0 => emaclite_v4_2}/src/xemaclite_l.h (97%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{emaclite_v4_0 => emaclite_v4_2}/src/xemaclite_selftest.c (90%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{emaclite_v4_0 => emaclite_v4_2}/src/xemaclite_sinit.c (99%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{gpio_v4_0 => gpio_v4_1}/src/Makefile (100%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{gpio_v4_0 => gpio_v4_1}/src/xgpio.c (96%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{gpio_v4_0 => gpio_v4_1}/src/xgpio.h (96%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{gpio_v4_0 => gpio_v4_1}/src/xgpio_extra.c (96%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{gpio_v4_0 => gpio_v4_1}/src/xgpio_g.c (90%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{gpio_v4_0 => gpio_v4_1}/src/xgpio_i.h (96%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{gpio_v4_0 => gpio_v4_1}/src/xgpio_intr.c (97%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{gpio_v4_0 => gpio_v4_1}/src/xgpio_l.h (88%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{gpio_v4_0 => gpio_v4_1}/src/xgpio_selftest.c (99%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{gpio_v4_0 => gpio_v4_1}/src/xgpio_sinit.c (95%) delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/Makefile delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc.c delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc.h delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_g.c delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_intr.c delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_l.c delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_l.h delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_options.c delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_selftest.c delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_disable_dcache.S delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/_profile_timer_hw.c delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xdebug.h rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/Makefile (94%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/_exit.c (90%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/bspconfig.h (89%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/changelog.txt (58%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/config.make (100%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/errno.c (75%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/fcntl.c (60%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/fsl.h (95%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/hw_exception_handler.S (68%) create mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/inbyte.c rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/mb_interface.h (80%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{tmrctr_v3_0/src/xtmrctr_i.h => standalone_v5_4/src/microblaze_disable_dcache.S} (56%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_disable_exceptions.S (90%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_disable_icache.S (84%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_disable_interrupts.S (84%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_enable_dcache.S (84%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_enable_exceptions.S (91%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_enable_icache.S (86%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_enable_interrupts.S (83%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_exception_handler.c (98%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_exceptions_g.h (83%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_exceptions_i.h (83%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_flush_cache_ext.S (90%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_flush_cache_ext_range.S (90%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_flush_dcache.S (80%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_flush_dcache_range.S (85%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_init_dcache_range.S (84%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_init_icache_range.S (84%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_interrupt_handler.c (95%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_interrupts_g.c (85%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_interrupts_i.h (97%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_invalidate_cache_ext.S (87%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_invalidate_cache_ext_range.S (91%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_invalidate_dcache.S (78%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_invalidate_dcache_range.S (84%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_invalidate_icache.S (80%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_invalidate_icache_range.S (85%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_scrub.S (96%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_sleep.c (96%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_sleep.h (96%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_update_dcache.S (92%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/microblaze_update_icache.S (91%) create mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/outbyte.c create mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/print.c rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/profile/Makefile (93%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/profile/_profile_clean.c (93%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/profile/_profile_init.c (59%) create mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/_profile_timer_hw.c rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/profile/_profile_timer_hw.h (51%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/profile/dummy.S (89%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/profile/mblaze_nt_types.h (93%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/profile/profile.h (78%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/profile/profile_cg.c (66%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/profile/profile_config.h (85%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/profile/profile_hist.c (82%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/profile/profile_mcount_arm.S (93%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/profile/profile_mcount_mb.S (89%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/profile/profile_mcount_ppc.S (90%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/pvr.c (97%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/pvr.h (99%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xbasic_types.h (96%) create mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xdebug.h rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xenv.h (98%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xenv_standalone.h (95%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_assert.c (95%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_assert.h (93%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_cache.c (97%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_cache.h (95%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_cache_vxworks.h (97%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_exception.c (95%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_exception.h (83%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_hal.h (97%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_io.c (88%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_io.h (82%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_macroback.h (99%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_misc_psreset_api.c (88%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_misc_psreset_api.h (59%) create mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_printf.c rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_printf.h (62%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_testcache.c (53%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_testcache.h (90%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_testio.c (75%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_testio.h (91%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_testmem.c (66%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_testmem.h (90%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xil_types.h (80%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{tmrctr_v3_0/src/xtmrctr_stats.c => standalone_v5_4/src/xplatform_info.c} (61%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{intc_v3_2/src/xintc_i.h => standalone_v5_4/src/xplatform_info.h} (69%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{standalone_v4_2 => standalone_v5_4}/src/xstatus.h (99%) delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/Makefile delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr.c delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr.h delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_g.c delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_intr.c delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_l.c delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_l.h delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_options.c delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_selftest.c rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{uartlite_v3_0 => uartlite_v3_2}/src/Makefile (100%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{uartlite_v3_0 => uartlite_v3_2}/src/xuartlite.c (97%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{uartlite_v3_0 => uartlite_v3_2}/src/xuartlite.h (95%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{uartlite_v3_0 => uartlite_v3_2}/src/xuartlite_g.c (90%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{uartlite_v3_0 => uartlite_v3_2}/src/xuartlite_i.h (97%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{uartlite_v3_0 => uartlite_v3_2}/src/xuartlite_intr.c (99%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{uartlite_v3_0 => uartlite_v3_2}/src/xuartlite_l.c (90%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{uartlite_v3_0 => uartlite_v3_2}/src/xuartlite_l.h (96%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{uartlite_v3_0 => uartlite_v3_2}/src/xuartlite_selftest.c (97%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{uartlite_v3_0 => uartlite_v3_2}/src/xuartlite_sinit.c (97%) rename FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/{uartlite_v3_0 => uartlite_v3_2}/src/xuartlite_stats.c (97%) delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/base_microblaze_design.hwh delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/base_microblaze_design_bd.tcl delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/base_microblaze_design_wrapper.mmi delete mode 100644 FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/sysdef.xml diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/.cproject b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/.cproject index 9e3529d0e..e8461948d 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/.cproject +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/.cproject @@ -1,8 +1,8 @@ - - + + diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/.project b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/.project index c2e688345..deb175a44 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/.project +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/.project @@ -1,7 +1,7 @@ BSP - Created by SDK v2014.4 + Created by SDK v2016.1 diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/Makefile b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/Makefile index 2c54e151e..58469a55c 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/Makefile +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/Makefile @@ -21,11 +21,11 @@ $(PROCESSOR)/lib/libxil.a: $(PROCESSOR)/lib/libxil_init.a %/make.include: $(if $(wildcard $(PROCESSOR)/lib/libxil_init.a),$(PROCESSOR)/lib/libxil.a,) @echo "Running Make include in $(subst /make.include,,$@)" - $(MAKE) -C $(subst /make.include,,$@) -s include "SHELL=$(SHELL)" "COMPILER=mb-gcc" "ARCHIVER=mb-ar" "COMPILER_FLAGS= -O2 -c -mcpu=v9.4 -mhard-float -mlittle-endian -mno-xl-soft-div -mno-xl-soft-mul -mxl-barrel-shift -mxl-float-convert -mxl-float-sqrt -mxl-multiply-high -mxl-pattern-compare" "EXTRA_COMPILER_FLAGS=-g -ffunction-sections -fdata-sections" + $(MAKE) -C $(subst /make.include,,$@) -s include "SHELL=$(SHELL)" "COMPILER=mb-gcc" "ARCHIVER=mb-ar" "COMPILER_FLAGS= -O2 -c -mcpu=v9.6 -mlittle-endian -mno-xl-soft-div -mxl-barrel-shift -mxl-pattern-compare -mxl-soft-mul" "EXTRA_COMPILER_FLAGS=-g" %/make.libs: include @echo "Running Make libs in $(subst /make.libs,,$@)" - $(MAKE) -C $(subst /make.libs,,$@) -s libs "SHELL=$(SHELL)" "COMPILER=mb-gcc" "ARCHIVER=mb-ar" "COMPILER_FLAGS= -O2 -c -mcpu=v9.4 -mhard-float -mlittle-endian -mno-xl-soft-div -mno-xl-soft-mul -mxl-barrel-shift -mxl-float-convert -mxl-float-sqrt -mxl-multiply-high -mxl-pattern-compare" "EXTRA_COMPILER_FLAGS=-g -ffunction-sections -fdata-sections" + $(MAKE) -C $(subst /make.libs,,$@) -s libs "SHELL=$(SHELL)" "COMPILER=mb-gcc" "ARCHIVER=mb-ar" "COMPILER_FLAGS= -O2 -c -mcpu=v9.6 -mlittle-endian -mno-xl-soft-div -mxl-barrel-shift -mxl-pattern-compare -mxl-soft-mul" "EXTRA_COMPILER_FLAGS=-g" clean: rm -f ${PROCESSOR}/lib/libxil.a diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/include/xparameters.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/include/xparameters.h index a2bb142c9..59c464bc7 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/include/xparameters.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/include/xparameters.h @@ -15,59 +15,72 @@ /* Definitions for peripheral MICROBLAZE_0 */ -#define XPAR_MICROBLAZE_0_ADDR_TAG_BITS 15 +#define XPAR_MICROBLAZE_0_ADDR_SIZE 32 +#define XPAR_MICROBLAZE_0_ADDR_TAG_BITS 16 #define XPAR_MICROBLAZE_0_ALLOW_DCACHE_WR 1 #define XPAR_MICROBLAZE_0_ALLOW_ICACHE_WR 1 #define XPAR_MICROBLAZE_0_AREA_OPTIMIZED 0 #define XPAR_MICROBLAZE_0_ASYNC_INTERRUPT 1 +#define XPAR_MICROBLAZE_0_ASYNC_WAKEUP 3 #define XPAR_MICROBLAZE_0_AVOID_PRIMITIVES 0 -#define XPAR_MICROBLAZE_0_BASE_VECTORS 0x00000000 +#define XPAR_MICROBLAZE_0_BASE_VECTORS 0x0000000000000000 #define XPAR_MICROBLAZE_0_BRANCH_TARGET_CACHE_SIZE 0 #define XPAR_MICROBLAZE_0_CACHE_BYTE_SIZE 32768 +#define XPAR_MICROBLAZE_0_DADDR_SIZE 32 #define XPAR_MICROBLAZE_0_DATA_SIZE 32 -#define XPAR_MICROBLAZE_0_DCACHE_ADDR_TAG 15 +#define XPAR_MICROBLAZE_0_DCACHE_ADDR_TAG 16 #define XPAR_MICROBLAZE_0_DCACHE_ALWAYS_USED 1 #define XPAR_MICROBLAZE_0_DCACHE_BASEADDR 0x80000000 #define XPAR_MICROBLAZE_0_DCACHE_BYTE_SIZE 32768 #define XPAR_MICROBLAZE_0_DCACHE_DATA_WIDTH 0 #define XPAR_MICROBLAZE_0_DCACHE_FORCE_TAG_LUTRAM 0 -#define XPAR_MICROBLAZE_0_DCACHE_HIGHADDR 0xBFFFFFFF +#define XPAR_MICROBLAZE_0_DCACHE_HIGHADDR 0xFFFFFFFF #define XPAR_MICROBLAZE_0_DCACHE_LINE_LEN 8 -#define XPAR_MICROBLAZE_0_DCACHE_USE_WRITEBACK 1 -#define XPAR_MICROBLAZE_0_DCACHE_VICTIMS 8 +#define XPAR_MICROBLAZE_0_DCACHE_USE_WRITEBACK 0 +#define XPAR_MICROBLAZE_0_DCACHE_VICTIMS 0 +#define XPAR_MICROBLAZE_0_DC_AXI_MON 0 #define XPAR_MICROBLAZE_0_DEBUG_COUNTER_WIDTH 32 -#define XPAR_MICROBLAZE_0_DEBUG_ENABLED 1 +#define XPAR_MICROBLAZE_0_DEBUG_ENABLED 2 #define XPAR_MICROBLAZE_0_DEBUG_EVENT_COUNTERS 5 #define XPAR_MICROBLAZE_0_DEBUG_EXTERNAL_TRACE 0 #define XPAR_MICROBLAZE_0_DEBUG_LATENCY_COUNTERS 1 #define XPAR_MICROBLAZE_0_DEBUG_PROFILE_SIZE 0 #define XPAR_MICROBLAZE_0_DEBUG_TRACE_SIZE 8192 -#define XPAR_MICROBLAZE_0_DIV_ZERO_EXCEPTION 1 +#define XPAR_MICROBLAZE_0_DIV_ZERO_EXCEPTION 0 +#define XPAR_MICROBLAZE_0_DP_AXI_MON 0 #define XPAR_MICROBLAZE_0_DYNAMIC_BUS_SIZING 0 #define XPAR_MICROBLAZE_0_D_AXI 1 #define XPAR_MICROBLAZE_0_D_LMB 1 +#define XPAR_MICROBLAZE_0_D_LMB_MON 0 #define XPAR_MICROBLAZE_0_ECC_USE_CE_EXCEPTION 0 #define XPAR_MICROBLAZE_0_EDGE_IS_POSITIVE 1 #define XPAR_MICROBLAZE_0_ENABLE_DISCRETE_PORTS 0 #define XPAR_MICROBLAZE_0_ENDIANNESS 1 #define XPAR_MICROBLAZE_0_FAULT_TOLERANT 0 -#define XPAR_MICROBLAZE_0_FPU_EXCEPTION 1 +#define XPAR_MICROBLAZE_0_FPU_EXCEPTION 0 #define XPAR_MICROBLAZE_0_FREQ 100000000 #define XPAR_MICROBLAZE_0_FSL_EXCEPTION 0 #define XPAR_MICROBLAZE_0_FSL_LINKS 0 +#define XPAR_MICROBLAZE_0_IADDR_SIZE 32 #define XPAR_MICROBLAZE_0_ICACHE_ALWAYS_USED 1 #define XPAR_MICROBLAZE_0_ICACHE_BASEADDR 0x80000000 #define XPAR_MICROBLAZE_0_ICACHE_DATA_WIDTH 0 #define XPAR_MICROBLAZE_0_ICACHE_FORCE_TAG_LUTRAM 0 -#define XPAR_MICROBLAZE_0_ICACHE_HIGHADDR 0xBFFFFFFF +#define XPAR_MICROBLAZE_0_ICACHE_HIGHADDR 0xFFFFFFFF #define XPAR_MICROBLAZE_0_ICACHE_LINE_LEN 8 -#define XPAR_MICROBLAZE_0_ICACHE_STREAMS 1 -#define XPAR_MICROBLAZE_0_ICACHE_VICTIMS 8 -#define XPAR_MICROBLAZE_0_ILL_OPCODE_EXCEPTION 1 +#define XPAR_MICROBLAZE_0_ICACHE_STREAMS 0 +#define XPAR_MICROBLAZE_0_ICACHE_VICTIMS 0 +#define XPAR_MICROBLAZE_0_IC_AXI_MON 0 +#define XPAR_MICROBLAZE_0_ILL_OPCODE_EXCEPTION 0 +#define XPAR_MICROBLAZE_0_IMPRECISE_EXCEPTIONS 0 +#define XPAR_MICROBLAZE_0_INSTR_SIZE 32 #define XPAR_MICROBLAZE_0_INTERCONNECT 2 #define XPAR_MICROBLAZE_0_INTERRUPT_IS_EDGE 0 +#define XPAR_MICROBLAZE_0_INTERRUPT_MON 0 +#define XPAR_MICROBLAZE_0_IP_AXI_MON 0 #define XPAR_MICROBLAZE_0_I_AXI 0 #define XPAR_MICROBLAZE_0_I_LMB 1 +#define XPAR_MICROBLAZE_0_I_LMB_MON 0 #define XPAR_MICROBLAZE_0_LOCKSTEP_SELECT 0 #define XPAR_MICROBLAZE_0_LOCKSTEP_SLAVE 0 #define XPAR_MICROBLAZE_0_M0_AXIS_DATA_WIDTH 32 @@ -106,7 +119,7 @@ #define XPAR_MICROBLAZE_0_MMU_ITLB_SIZE 2 #define XPAR_MICROBLAZE_0_MMU_PRIVILEGED_INSTR 0 #define XPAR_MICROBLAZE_0_MMU_TLB_ACCESS 3 -#define XPAR_MICROBLAZE_0_MMU_ZONES 2 +#define XPAR_MICROBLAZE_0_MMU_ZONES 16 #define XPAR_MICROBLAZE_0_M_AXI_DC_ADDR_WIDTH 32 #define XPAR_MICROBLAZE_0_M_AXI_DC_ARUSER_WIDTH 5 #define XPAR_MICROBLAZE_0_M_AXI_DC_AWUSER_WIDTH 5 @@ -122,7 +135,7 @@ #define XPAR_MICROBLAZE_0_M_AXI_DP_DATA_WIDTH 32 #define XPAR_MICROBLAZE_0_M_AXI_DP_EXCLUSIVE_ACCESS 0 #define XPAR_MICROBLAZE_0_M_AXI_DP_THREAD_ID_WIDTH 1 -#define XPAR_MICROBLAZE_0_M_AXI_D_BUS_EXCEPTION 1 +#define XPAR_MICROBLAZE_0_M_AXI_D_BUS_EXCEPTION 0 #define XPAR_MICROBLAZE_0_M_AXI_IC_ADDR_WIDTH 32 #define XPAR_MICROBLAZE_0_M_AXI_IC_ARUSER_WIDTH 5 #define XPAR_MICROBLAZE_0_M_AXI_IC_AWUSER_WIDTH 5 @@ -136,7 +149,7 @@ #define XPAR_MICROBLAZE_0_M_AXI_IP_ADDR_WIDTH 32 #define XPAR_MICROBLAZE_0_M_AXI_IP_DATA_WIDTH 32 #define XPAR_MICROBLAZE_0_M_AXI_IP_THREAD_ID_WIDTH 1 -#define XPAR_MICROBLAZE_0_M_AXI_I_BUS_EXCEPTION 1 +#define XPAR_MICROBLAZE_0_M_AXI_I_BUS_EXCEPTION 0 #define XPAR_MICROBLAZE_0_NUMBER_OF_PC_BRK 8 #define XPAR_MICROBLAZE_0_NUMBER_OF_RD_ADDR_BRK 2 #define XPAR_MICROBLAZE_0_NUMBER_OF_WR_ADDR_BRK 2 @@ -144,7 +157,7 @@ #define XPAR_MICROBLAZE_0_NUM_SYNC_FF_CLK_DEBUG 2 #define XPAR_MICROBLAZE_0_NUM_SYNC_FF_CLK_IRQ 1 #define XPAR_MICROBLAZE_0_NUM_SYNC_FF_DBG_CLK 1 -#define XPAR_MICROBLAZE_0_OPCODE_0X0_ILLEGAL 1 +#define XPAR_MICROBLAZE_0_OPCODE_0X0_ILLEGAL 0 #define XPAR_MICROBLAZE_0_OPTIMIZATION 0 #define XPAR_MICROBLAZE_0_PC_WIDTH 32 #define XPAR_MICROBLAZE_0_PVR 0 @@ -184,8 +197,8 @@ #define XPAR_MICROBLAZE_0_S15_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_0_S15_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_0_SCO 0 -#define XPAR_MICROBLAZE_0_TRACE 1 -#define XPAR_MICROBLAZE_0_UNALIGNED_EXCEPTIONS 1 +#define XPAR_MICROBLAZE_0_TRACE 0 +#define XPAR_MICROBLAZE_0_UNALIGNED_EXCEPTIONS 0 #define XPAR_MICROBLAZE_0_USE_BARREL 1 #define XPAR_MICROBLAZE_0_USE_BRANCH_TARGET_CACHE 1 #define XPAR_MICROBLAZE_0_USE_CONFIG_RESET 0 @@ -194,78 +207,92 @@ #define XPAR_MICROBLAZE_0_USE_EXTENDED_FSL_INSTR 0 #define XPAR_MICROBLAZE_0_USE_EXT_BRK 0 #define XPAR_MICROBLAZE_0_USE_EXT_NM_BRK 0 -#define XPAR_MICROBLAZE_0_USE_FPU 2 -#define XPAR_MICROBLAZE_0_USE_HW_MUL 2 +#define XPAR_MICROBLAZE_0_USE_FPU 0 +#define XPAR_MICROBLAZE_0_USE_HW_MUL 0 #define XPAR_MICROBLAZE_0_USE_ICACHE 1 -#define XPAR_MICROBLAZE_0_USE_INTERRUPT 1 +#define XPAR_MICROBLAZE_0_USE_INTERRUPT 0 #define XPAR_MICROBLAZE_0_USE_MMU 0 #define XPAR_MICROBLAZE_0_USE_MSR_INSTR 1 +#define XPAR_MICROBLAZE_0_USE_NON_SECURE 0 #define XPAR_MICROBLAZE_0_USE_PCMP_INSTR 1 #define XPAR_MICROBLAZE_0_USE_REORDER_INSTR 1 -#define XPAR_MICROBLAZE_0_USE_STACK_PROTECTION 1 -#define XPAR_MICROBLAZE_0_COMPONENT_NAME base_microblaze_design_microblaze_0_0 +#define XPAR_MICROBLAZE_0_USE_STACK_PROTECTION 0 +#define XPAR_MICROBLAZE_0_COMPONENT_NAME mb_subsystem_microblaze_0_0 #define XPAR_MICROBLAZE_0_EDK_IPTYPE PROCESSOR #define XPAR_MICROBLAZE_0_EDK_SPECIAL microblaze -#define XPAR_MICROBLAZE_0_G_TEMPLATE_LIST 2 -#define XPAR_MICROBLAZE_0_G_USE_EXCEPTIONS 1 +#define XPAR_MICROBLAZE_0_G_TEMPLATE_LIST 0 +#define XPAR_MICROBLAZE_0_G_USE_EXCEPTIONS 0 /******************************************************************/ #define XPAR_CPU_ID 0 #define XPAR_MICROBLAZE_ID 0 -#define XPAR_MICROBLAZE_ADDR_TAG_BITS 15 +#define XPAR_MICROBLAZE_ADDR_SIZE 32 +#define XPAR_MICROBLAZE_ADDR_TAG_BITS 16 #define XPAR_MICROBLAZE_ALLOW_DCACHE_WR 1 #define XPAR_MICROBLAZE_ALLOW_ICACHE_WR 1 #define XPAR_MICROBLAZE_AREA_OPTIMIZED 0 #define XPAR_MICROBLAZE_ASYNC_INTERRUPT 1 +#define XPAR_MICROBLAZE_ASYNC_WAKEUP 3 #define XPAR_MICROBLAZE_AVOID_PRIMITIVES 0 -#define XPAR_MICROBLAZE_BASE_VECTORS 0x00000000 +#define XPAR_MICROBLAZE_BASE_VECTORS 0x0000000000000000 #define XPAR_MICROBLAZE_BRANCH_TARGET_CACHE_SIZE 0 #define XPAR_MICROBLAZE_CACHE_BYTE_SIZE 32768 +#define XPAR_MICROBLAZE_DADDR_SIZE 32 #define XPAR_MICROBLAZE_DATA_SIZE 32 -#define XPAR_MICROBLAZE_DCACHE_ADDR_TAG 15 +#define XPAR_MICROBLAZE_DCACHE_ADDR_TAG 16 #define XPAR_MICROBLAZE_DCACHE_ALWAYS_USED 1 #define XPAR_MICROBLAZE_DCACHE_BASEADDR 0x80000000 #define XPAR_MICROBLAZE_DCACHE_BYTE_SIZE 32768 #define XPAR_MICROBLAZE_DCACHE_DATA_WIDTH 0 #define XPAR_MICROBLAZE_DCACHE_FORCE_TAG_LUTRAM 0 -#define XPAR_MICROBLAZE_DCACHE_HIGHADDR 0xBFFFFFFF +#define XPAR_MICROBLAZE_DCACHE_HIGHADDR 0xFFFFFFFF #define XPAR_MICROBLAZE_DCACHE_LINE_LEN 8 -#define XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK 1 -#define XPAR_MICROBLAZE_DCACHE_VICTIMS 8 +#define XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK 0 +#define XPAR_MICROBLAZE_DCACHE_VICTIMS 0 +#define XPAR_MICROBLAZE_DC_AXI_MON 0 #define XPAR_MICROBLAZE_DEBUG_COUNTER_WIDTH 32 -#define XPAR_MICROBLAZE_DEBUG_ENABLED 1 +#define XPAR_MICROBLAZE_DEBUG_ENABLED 2 #define XPAR_MICROBLAZE_DEBUG_EVENT_COUNTERS 5 #define XPAR_MICROBLAZE_DEBUG_EXTERNAL_TRACE 0 #define XPAR_MICROBLAZE_DEBUG_LATENCY_COUNTERS 1 #define XPAR_MICROBLAZE_DEBUG_PROFILE_SIZE 0 #define XPAR_MICROBLAZE_DEBUG_TRACE_SIZE 8192 -#define XPAR_MICROBLAZE_DIV_ZERO_EXCEPTION 1 +#define XPAR_MICROBLAZE_DIV_ZERO_EXCEPTION 0 +#define XPAR_MICROBLAZE_DP_AXI_MON 0 #define XPAR_MICROBLAZE_DYNAMIC_BUS_SIZING 0 #define XPAR_MICROBLAZE_D_AXI 1 #define XPAR_MICROBLAZE_D_LMB 1 +#define XPAR_MICROBLAZE_D_LMB_MON 0 #define XPAR_MICROBLAZE_ECC_USE_CE_EXCEPTION 0 #define XPAR_MICROBLAZE_EDGE_IS_POSITIVE 1 #define XPAR_MICROBLAZE_ENABLE_DISCRETE_PORTS 0 #define XPAR_MICROBLAZE_ENDIANNESS 1 #define XPAR_MICROBLAZE_FAULT_TOLERANT 0 -#define XPAR_MICROBLAZE_FPU_EXCEPTION 1 +#define XPAR_MICROBLAZE_FPU_EXCEPTION 0 #define XPAR_MICROBLAZE_FREQ 100000000 #define XPAR_MICROBLAZE_FSL_EXCEPTION 0 #define XPAR_MICROBLAZE_FSL_LINKS 0 +#define XPAR_MICROBLAZE_IADDR_SIZE 32 #define XPAR_MICROBLAZE_ICACHE_ALWAYS_USED 1 #define XPAR_MICROBLAZE_ICACHE_BASEADDR 0x80000000 #define XPAR_MICROBLAZE_ICACHE_DATA_WIDTH 0 #define XPAR_MICROBLAZE_ICACHE_FORCE_TAG_LUTRAM 0 -#define XPAR_MICROBLAZE_ICACHE_HIGHADDR 0xBFFFFFFF +#define XPAR_MICROBLAZE_ICACHE_HIGHADDR 0xFFFFFFFF #define XPAR_MICROBLAZE_ICACHE_LINE_LEN 8 -#define XPAR_MICROBLAZE_ICACHE_STREAMS 1 -#define XPAR_MICROBLAZE_ICACHE_VICTIMS 8 -#define XPAR_MICROBLAZE_ILL_OPCODE_EXCEPTION 1 +#define XPAR_MICROBLAZE_ICACHE_STREAMS 0 +#define XPAR_MICROBLAZE_ICACHE_VICTIMS 0 +#define XPAR_MICROBLAZE_IC_AXI_MON 0 +#define XPAR_MICROBLAZE_ILL_OPCODE_EXCEPTION 0 +#define XPAR_MICROBLAZE_IMPRECISE_EXCEPTIONS 0 +#define XPAR_MICROBLAZE_INSTR_SIZE 32 #define XPAR_MICROBLAZE_INTERCONNECT 2 #define XPAR_MICROBLAZE_INTERRUPT_IS_EDGE 0 +#define XPAR_MICROBLAZE_INTERRUPT_MON 0 +#define XPAR_MICROBLAZE_IP_AXI_MON 0 #define XPAR_MICROBLAZE_I_AXI 0 #define XPAR_MICROBLAZE_I_LMB 1 +#define XPAR_MICROBLAZE_I_LMB_MON 0 #define XPAR_MICROBLAZE_LOCKSTEP_SELECT 0 #define XPAR_MICROBLAZE_LOCKSTEP_SLAVE 0 #define XPAR_MICROBLAZE_M0_AXIS_DATA_WIDTH 32 @@ -304,7 +331,7 @@ #define XPAR_MICROBLAZE_MMU_ITLB_SIZE 2 #define XPAR_MICROBLAZE_MMU_PRIVILEGED_INSTR 0 #define XPAR_MICROBLAZE_MMU_TLB_ACCESS 3 -#define XPAR_MICROBLAZE_MMU_ZONES 2 +#define XPAR_MICROBLAZE_MMU_ZONES 16 #define XPAR_MICROBLAZE_M_AXI_DC_ADDR_WIDTH 32 #define XPAR_MICROBLAZE_M_AXI_DC_ARUSER_WIDTH 5 #define XPAR_MICROBLAZE_M_AXI_DC_AWUSER_WIDTH 5 @@ -320,7 +347,7 @@ #define XPAR_MICROBLAZE_M_AXI_DP_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M_AXI_DP_EXCLUSIVE_ACCESS 0 #define XPAR_MICROBLAZE_M_AXI_DP_THREAD_ID_WIDTH 1 -#define XPAR_MICROBLAZE_M_AXI_D_BUS_EXCEPTION 1 +#define XPAR_MICROBLAZE_M_AXI_D_BUS_EXCEPTION 0 #define XPAR_MICROBLAZE_M_AXI_IC_ADDR_WIDTH 32 #define XPAR_MICROBLAZE_M_AXI_IC_ARUSER_WIDTH 5 #define XPAR_MICROBLAZE_M_AXI_IC_AWUSER_WIDTH 5 @@ -334,7 +361,7 @@ #define XPAR_MICROBLAZE_M_AXI_IP_ADDR_WIDTH 32 #define XPAR_MICROBLAZE_M_AXI_IP_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M_AXI_IP_THREAD_ID_WIDTH 1 -#define XPAR_MICROBLAZE_M_AXI_I_BUS_EXCEPTION 1 +#define XPAR_MICROBLAZE_M_AXI_I_BUS_EXCEPTION 0 #define XPAR_MICROBLAZE_NUMBER_OF_PC_BRK 8 #define XPAR_MICROBLAZE_NUMBER_OF_RD_ADDR_BRK 2 #define XPAR_MICROBLAZE_NUMBER_OF_WR_ADDR_BRK 2 @@ -342,7 +369,7 @@ #define XPAR_MICROBLAZE_NUM_SYNC_FF_CLK_DEBUG 2 #define XPAR_MICROBLAZE_NUM_SYNC_FF_CLK_IRQ 1 #define XPAR_MICROBLAZE_NUM_SYNC_FF_DBG_CLK 1 -#define XPAR_MICROBLAZE_OPCODE_0X0_ILLEGAL 1 +#define XPAR_MICROBLAZE_OPCODE_0X0_ILLEGAL 0 #define XPAR_MICROBLAZE_OPTIMIZATION 0 #define XPAR_MICROBLAZE_PC_WIDTH 32 #define XPAR_MICROBLAZE_PVR 0 @@ -382,8 +409,8 @@ #define XPAR_MICROBLAZE_S15_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S15_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_SCO 0 -#define XPAR_MICROBLAZE_TRACE 1 -#define XPAR_MICROBLAZE_UNALIGNED_EXCEPTIONS 1 +#define XPAR_MICROBLAZE_TRACE 0 +#define XPAR_MICROBLAZE_UNALIGNED_EXCEPTIONS 0 #define XPAR_MICROBLAZE_USE_BARREL 1 #define XPAR_MICROBLAZE_USE_BRANCH_TARGET_CACHE 1 #define XPAR_MICROBLAZE_USE_CONFIG_RESET 0 @@ -392,23 +419,26 @@ #define XPAR_MICROBLAZE_USE_EXTENDED_FSL_INSTR 0 #define XPAR_MICROBLAZE_USE_EXT_BRK 0 #define XPAR_MICROBLAZE_USE_EXT_NM_BRK 0 -#define XPAR_MICROBLAZE_USE_FPU 2 -#define XPAR_MICROBLAZE_USE_HW_MUL 2 +#define XPAR_MICROBLAZE_USE_FPU 0 +#define XPAR_MICROBLAZE_USE_HW_MUL 0 #define XPAR_MICROBLAZE_USE_ICACHE 1 -#define XPAR_MICROBLAZE_USE_INTERRUPT 1 +#define XPAR_MICROBLAZE_USE_INTERRUPT 0 #define XPAR_MICROBLAZE_USE_MMU 0 #define XPAR_MICROBLAZE_USE_MSR_INSTR 1 +#define XPAR_MICROBLAZE_USE_NON_SECURE 0 #define XPAR_MICROBLAZE_USE_PCMP_INSTR 1 #define XPAR_MICROBLAZE_USE_REORDER_INSTR 1 -#define XPAR_MICROBLAZE_USE_STACK_PROTECTION 1 -#define XPAR_MICROBLAZE_COMPONENT_NAME base_microblaze_design_microblaze_0_0 +#define XPAR_MICROBLAZE_USE_STACK_PROTECTION 0 +#define XPAR_MICROBLAZE_COMPONENT_NAME mb_subsystem_microblaze_0_0 #define XPAR_MICROBLAZE_EDK_IPTYPE PROCESSOR #define XPAR_MICROBLAZE_EDK_SPECIAL microblaze -#define XPAR_MICROBLAZE_G_TEMPLATE_LIST 2 -#define XPAR_MICROBLAZE_G_USE_EXCEPTIONS 1 +#define XPAR_MICROBLAZE_G_TEMPLATE_LIST 0 +#define XPAR_MICROBLAZE_G_USE_EXCEPTIONS 0 /******************************************************************/ +#define STDIN_BASEADDRESS 0x40600000 +#define STDOUT_BASEADDRESS 0x40600000 /******************************************************************/ @@ -428,7 +458,7 @@ #define XPAR_MICROBLAZE_0_LOCAL_MEMORY_DLMB_BRAM_IF_CNTLR_ECC_ONOFF_RESET_VALUE 1 #define XPAR_MICROBLAZE_0_LOCAL_MEMORY_DLMB_BRAM_IF_CNTLR_WRITE_ACCESS 2 #define XPAR_MICROBLAZE_0_LOCAL_MEMORY_DLMB_BRAM_IF_CNTLR_BASEADDR 0x00000000 -#define XPAR_MICROBLAZE_0_LOCAL_MEMORY_DLMB_BRAM_IF_CNTLR_HIGHADDR 0x0003FFFF +#define XPAR_MICROBLAZE_0_LOCAL_MEMORY_DLMB_BRAM_IF_CNTLR_HIGHADDR 0x0000FFFF #define XPAR_MICROBLAZE_0_LOCAL_MEMORY_DLMB_BRAM_IF_CNTLR_S_AXI_CTRL_BASEADDR 0xFFFFFFFF #define XPAR_MICROBLAZE_0_LOCAL_MEMORY_DLMB_BRAM_IF_CNTLR_S_AXI_CTRL_HIGHADDR 0xFFFFFFFF @@ -446,7 +476,7 @@ #define XPAR_MICROBLAZE_0_LOCAL_MEMORY_ILMB_BRAM_IF_CNTLR_ECC_ONOFF_RESET_VALUE 1 #define XPAR_MICROBLAZE_0_LOCAL_MEMORY_ILMB_BRAM_IF_CNTLR_WRITE_ACCESS 2 #define XPAR_MICROBLAZE_0_LOCAL_MEMORY_ILMB_BRAM_IF_CNTLR_BASEADDR 0x00000000 -#define XPAR_MICROBLAZE_0_LOCAL_MEMORY_ILMB_BRAM_IF_CNTLR_HIGHADDR 0x0003FFFF +#define XPAR_MICROBLAZE_0_LOCAL_MEMORY_ILMB_BRAM_IF_CNTLR_HIGHADDR 0x0000FFFF #define XPAR_MICROBLAZE_0_LOCAL_MEMORY_ILMB_BRAM_IF_CNTLR_S_AXI_CTRL_BASEADDR 0xFFFFFFFF #define XPAR_MICROBLAZE_0_LOCAL_MEMORY_ILMB_BRAM_IF_CNTLR_S_AXI_CTRL_HIGHADDR 0xFFFFFFFF @@ -466,7 +496,7 @@ #define XPAR_BRAM_0_ECC_ONOFF_RESET_VALUE 1 #define XPAR_BRAM_0_WRITE_ACCESS 2 #define XPAR_BRAM_0_BASEADDR 0x00000000 -#define XPAR_BRAM_0_HIGHADDR 0x0003FFFF +#define XPAR_BRAM_0_HIGHADDR 0x0000FFFF /* Canonical definitions for peripheral MICROBLAZE_0_LOCAL_MEMORY_ILMB_BRAM_IF_CNTLR */ #define XPAR_BRAM_1_DEVICE_ID XPAR_MICROBLAZE_0_LOCAL_MEMORY_ILMB_BRAM_IF_CNTLR_DEVICE_ID @@ -481,7 +511,7 @@ #define XPAR_BRAM_1_ECC_ONOFF_RESET_VALUE 1 #define XPAR_BRAM_1_WRITE_ACCESS 2 #define XPAR_BRAM_1_BASEADDR 0x00000000 -#define XPAR_BRAM_1_HIGHADDR 0x0003FFFF +#define XPAR_BRAM_1_HIGHADDR 0x0000FFFF /******************************************************************/ @@ -534,55 +564,6 @@ #define XPAR_GPIO_0_IS_DUAL 0 -/******************************************************************/ - -#define XPAR_INTC_MAX_NUM_INTR_INPUTS 3 -#define XPAR_XINTC_HAS_IPR 1 -#define XPAR_XINTC_HAS_SIE 1 -#define XPAR_XINTC_HAS_CIE 1 -#define XPAR_XINTC_HAS_IVR 1 -/* Definitions for driver INTC */ -#define XPAR_XINTC_NUM_INSTANCES 1 - -/* Definitions for peripheral AXI_INTC_0 */ -#define XPAR_AXI_INTC_0_DEVICE_ID 0 -#define XPAR_AXI_INTC_0_BASEADDR 0x41200000 -#define XPAR_AXI_INTC_0_HIGHADDR 0x4120FFFF -#define XPAR_AXI_INTC_0_KIND_OF_INTR 0xFFFFFFFE -#define XPAR_AXI_INTC_0_HAS_FAST 0 -#define XPAR_AXI_INTC_0_IVAR_RESET_VALUE 0x00000010 -#define XPAR_AXI_INTC_0_NUM_INTR_INPUTS 3 - - -/******************************************************************/ - -#define XPAR_INTC_SINGLE_BASEADDR 0x41200000 -#define XPAR_INTC_SINGLE_HIGHADDR 0x4120FFFF -#define XPAR_INTC_SINGLE_DEVICE_ID XPAR_AXI_INTC_0_DEVICE_ID -#define XPAR_AXI_INTC_0_TYPE 0 -#define XPAR_AXI_TIMER_0_INTERRUPT_MASK 0X000001 -#define XPAR_AXI_INTC_0_AXI_TIMER_0_INTERRUPT_INTR 0 -#define XPAR_AXI_UARTLITE_0_INTERRUPT_MASK 0X000002 -#define XPAR_AXI_INTC_0_AXI_UARTLITE_0_INTERRUPT_INTR 1 -#define XPAR_AXI_ETHERNETLITE_0_IP2INTC_IRPT_MASK 0X000004 -#define XPAR_AXI_INTC_0_AXI_ETHERNETLITE_0_IP2INTC_IRPT_INTR 2 - -/******************************************************************/ - -/* Canonical definitions for peripheral AXI_INTC_0 */ -#define XPAR_INTC_0_DEVICE_ID XPAR_AXI_INTC_0_DEVICE_ID -#define XPAR_INTC_0_BASEADDR 0x41200000 -#define XPAR_INTC_0_HIGHADDR 0x4120FFFF -#define XPAR_INTC_0_KIND_OF_INTR 0xFFFFFFFE -#define XPAR_INTC_0_HAS_FAST 0 -#define XPAR_INTC_0_IVAR_RESET_VALUE 0x00000010 -#define XPAR_INTC_0_NUM_INTR_INPUTS 3 -#define XPAR_INTC_0_INTC_TYPE 0 - -#define XPAR_INTC_0_TMRCTR_0_VEC_ID XPAR_AXI_INTC_0_AXI_TIMER_0_INTERRUPT_INTR -#define XPAR_INTC_0_UARTLITE_0_VEC_ID XPAR_AXI_INTC_0_AXI_UARTLITE_0_INTERRUPT_INTR -#define XPAR_INTC_0_EMACLITE_0_VEC_ID XPAR_AXI_INTC_0_AXI_ETHERNETLITE_0_IP2INTC_IRPT_INTR - /******************************************************************/ /* Definitions for driver MIG_7SERIES */ @@ -601,7 +582,7 @@ /* Definitions for peripheral MIG_7SERIES_0 */ #define XPAR_MIG_7SERIES_0_BASEADDR 0x80000000 -#define XPAR_MIG_7SERIES_0_HIGHADDR 0xBFFFFFFF +#define XPAR_MIG_7SERIES_0_HIGHADDR 0x9FFFFFFF /******************************************************************/ @@ -613,28 +594,8 @@ #define XPAR_MIG7SERIES_0_DDR_BANK_WIDTH 3 #define XPAR_MIG7SERIES_0_DDR_DQ_WIDTH 64 #define XPAR_MIG7SERIES_0_BASEADDR 0x80000000 -#define XPAR_MIG7SERIES_0_HIGHADDR 0xBFFFFFFF - - -/******************************************************************/ - -/* Definitions for driver TMRCTR */ -#define XPAR_XTMRCTR_NUM_INSTANCES 1 - -/* Definitions for peripheral AXI_TIMER_0 */ -#define XPAR_AXI_TIMER_0_DEVICE_ID 0 -#define XPAR_AXI_TIMER_0_BASEADDR 0x41C00000 -#define XPAR_AXI_TIMER_0_HIGHADDR 0x41C0FFFF -#define XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ 100000000 - - -/******************************************************************/ +#define XPAR_MIG7SERIES_0_HIGHADDR 0x9FFFFFFF -/* Canonical definitions for peripheral AXI_TIMER_0 */ -#define XPAR_TMRCTR_0_DEVICE_ID 0 -#define XPAR_TMRCTR_0_BASEADDR 0x41C00000 -#define XPAR_TMRCTR_0_HIGHADDR 0x41C0FFFF -#define XPAR_TMRCTR_0_CLOCK_FREQ_HZ XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ /******************************************************************/ @@ -645,7 +606,7 @@ #define XPAR_AXI_UARTLITE_0_BASEADDR 0x40600000 #define XPAR_AXI_UARTLITE_0_HIGHADDR 0x4060FFFF #define XPAR_AXI_UARTLITE_0_DEVICE_ID 0 -#define XPAR_AXI_UARTLITE_0_BAUDRATE 115200 +#define XPAR_AXI_UARTLITE_0_BAUDRATE 9600 #define XPAR_AXI_UARTLITE_0_USE_PARITY 0 #define XPAR_AXI_UARTLITE_0_ODD_PARITY 0 #define XPAR_AXI_UARTLITE_0_DATA_BITS 8 @@ -657,7 +618,7 @@ #define XPAR_UARTLITE_0_DEVICE_ID XPAR_AXI_UARTLITE_0_DEVICE_ID #define XPAR_UARTLITE_0_BASEADDR 0x40600000 #define XPAR_UARTLITE_0_HIGHADDR 0x4060FFFF -#define XPAR_UARTLITE_0_BAUDRATE 115200 +#define XPAR_UARTLITE_0_BAUDRATE 9600 #define XPAR_UARTLITE_0_USE_PARITY 0 #define XPAR_UARTLITE_0_ODD_PARITY 0 #define XPAR_UARTLITE_0_DATA_BITS 8 diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/Makefile b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/Makefile similarity index 100% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/Makefile rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/Makefile diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram.c similarity index 95% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram.c index 34b470913..432070827 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2010 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2010 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -32,6 +32,8 @@ /** * @file xbram.c +* @addtogroup bram_v4_0 +* @{ * * The implementation of the XBram driver's basic functionality. * See xbram.h for more information about the driver. @@ -49,6 +51,8 @@ * 3.01a sa 13/01/12 Added CorrectableFailingDataRegs and * UncorrectableFailingDataRegs in * XBram_CfgInitialize API. +* 4.1 sk 11/10/15 Used UINTPTR instead of u32 for Baseaddress CR# 867425. +* Changed the prototype of XBram_CfgInitialize API. * * *****************************************************************************/ @@ -104,7 +108,7 @@ *****************************************************************************/ int XBram_CfgInitialize(XBram *InstancePtr, XBram_Config *Config, - u32 EffectiveAddr) + UINTPTR EffectiveAddr) { /* * Assert arguments @@ -142,3 +146,4 @@ int XBram_CfgInitialize(XBram *InstancePtr, return (XST_SUCCESS); } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram.h similarity index 95% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram.h index cbbe4d84a..8335cd188 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2010 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2010 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -32,6 +32,9 @@ /*****************************************************************************/ /** * @file xbram.h +* @addtogroup bram_v4_0 +* @{ +* @details * * If ECC is not enabled, this driver exists only to allow the tools to * create a memory test application and to populate xparameters.h with memory @@ -108,6 +111,8 @@ * flush the Cache after writing to BRAM in InjectErrors * API(CR #719011) * 4.0 adk 19/12/13 Updated as per the New Tcl API's +* 4.1 sk 11/10/15 Used UINTPTR instead of u32 for Baseaddress CR# 867425. +* Changed the prototype of XBram_CfgInitialize API. * *****************************************************************************/ #ifndef XBRAM_H /* prevent circular inclusions */ @@ -158,8 +163,8 @@ typedef struct { * h/w */ u32 MemBaseAddress; /**< Device memory base address */ u32 MemHighAddress; /**< Device memory high address */ - u32 CtrlBaseAddress; /**< Device register base address.*/ - u32 CtrlHighAddress; /**< Device register base address.*/ + UINTPTR CtrlBaseAddress; /**< Device register base address.*/ + UINTPTR CtrlHighAddress; /**< Device register base address.*/ } XBram_Config; /** @@ -187,7 +192,7 @@ XBram_Config *XBram_LookupConfig(u16 DeviceId); * Functions implemented in xbram.c */ int XBram_CfgInitialize(XBram *InstancePtr, XBram_Config *Config, - u32 EffectiveAddr); + UINTPTR EffectiveAddr); /* * Functions implemented in xbram_selftest.c @@ -208,3 +213,4 @@ u32 XBram_InterruptGetStatus(XBram *InstancePtr); #endif #endif /* end of protection macro */ +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_g.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_g.c similarity index 94% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_g.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_g.c index ff57a20dc..aa923f4f9 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_g.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_g.c @@ -5,7 +5,7 @@ * Version: * DO NOT EDIT. * -* Copyright (C) 2010-2015 Xilinx, Inc. All Rights Reserved.* +* Copyright (C) 2010-2016 Xilinx, Inc. All Rights Reserved.* *Permission is hereby granted, free of charge, to any person obtaining a copy *of this software and associated documentation files (the Software), to deal *in the Software without restriction, including without limitation the rights @@ -22,8 +22,8 @@ * *THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -*XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +*XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, *WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT *OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_hw.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_hw.h similarity index 99% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_hw.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_hw.h index fc0e8f6e5..44c5897f8 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_hw.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_hw.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2011 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2011 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -33,6 +33,8 @@ /** * * @file xbram_hw.h +* @addtogroup bram_v4_0 +* @{ * * This header file contains identifiers and driver functions (or * macros) that can be used to access the device. The user should refer to the @@ -404,3 +406,4 @@ extern "C" { #endif #endif /* end of protection macro */ +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_intr.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_intr.c similarity index 98% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_intr.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_intr.c index a411eb93d..a4b2e0ef8 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_intr.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_intr.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2010 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2010 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -33,6 +33,8 @@ /*****************************************************************************/ /** * @file xbram_intr.c +* @addtogroup bram_v4_0 +* @{ * * Implements BRAM interrupt processing functions for the * XBram driver. See xbram.h for more information @@ -233,3 +235,4 @@ u32 XBram_InterruptGetStatus(XBram * InstancePtr) return XBram_ReadReg(InstancePtr->Config.CtrlBaseAddress, XBRAM_ECC_EN_IRQ_OFFSET); } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_selftest.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_selftest.c similarity index 99% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_selftest.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_selftest.c index a812c3299..0b5f3b412 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_selftest.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_selftest.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2011 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2011 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -32,6 +32,8 @@ /*****************************************************************************/ /** * @file xbram_selftest.c +* @addtogroup bram_v4_0 +* @{ * * The implementation of the XBram driver's self test function. This SelfTest * is only applicable if ECC is enabled. @@ -554,3 +556,4 @@ int XBram_SelfTest(XBram *InstancePtr, u8 IntMask) return (XST_SUCCESS); } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_sinit.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_sinit.c similarity index 97% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_sinit.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_sinit.c index bae977a57..f44fc5ce3 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_0/src/xbram_sinit.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/bram_v4_1/src/xbram_sinit.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2010 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2010 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -32,6 +32,8 @@ /*****************************************************************************/ /** * @file xbram_sinit.c +* @addtogroup bram_v4_0 +* @{ * * The implementation of the XBram driver's static initialzation * functionality. @@ -99,3 +101,4 @@ XBram_Config *XBram_LookupConfig(u16 DeviceId) return CfgPtr; } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_2/src/Makefile b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_4/src/Makefile similarity index 87% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_2/src/Makefile rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_4/src/Makefile index 280556566..dd934f662 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_2/src/Makefile +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_4/src/Makefile @@ -17,10 +17,10 @@ INCLUDEFILES=xio.h libs: echo "Compiling cpu" $(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES) - $(ARCHIVER) -r ${RELEASEDIR}/${LIB} ${OUTS} + $(ARCHIVER) -r ${RELEASEDIR}/${LIB} ${OUTS} make clean -include: +include: ${CP} ${INCLUDEFILES} ${INCLUDEDIR} clean: diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_2/src/fsl.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_4/src/fsl.h similarity index 99% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_2/src/fsl.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_4/src/fsl.h index d13b3d52d..c3b5c0235 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_2/src/fsl.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_4/src/fsl.h @@ -32,6 +32,8 @@ /*****************************************************************************/ /** * @file fsl.h +* @addtogroup cpu_v2_3 +* @{ * * This file contains macros for interfacing to the Fast Simplex Link (FSL) * interface.. @@ -167,4 +169,4 @@ extern "C" { } #endif #endif /* _FSL_H */ - +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_2/src/xio.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_4/src/xio.c similarity index 99% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_2/src/xio.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_4/src/xio.c index b71887d17..086c3129b 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_2/src/xio.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_4/src/xio.c @@ -33,6 +33,8 @@ /** * * @file xio.c +* @addtogroup cpu_v2_3 +* @{ * * Contains I/O functions for memory-mapped or non-memory-mapped I/O * architectures. These functions encapsulate generic CPU I/O requirements. @@ -225,3 +227,4 @@ void XIo_OutSwap32(XIo_Address OutAddress, u32 Value) XIo_EndianSwap32(Value, &OutData); XIo_Out32(OutAddress, OutData); } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_2/src/xio.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_4/src/xio.h similarity index 95% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_2/src/xio.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_4/src/xio.h index 77ab04681..0d55bbd86 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_2/src/xio.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/cpu_v2_4/src/xio.h @@ -33,6 +33,9 @@ /** * * @file xio.h +* @addtogroup cpu_v2_3 +* @{ +* @details * * This file contains the interface for the XIo component, which encapsulates * the Input/Output functions for processors that do not require any special @@ -59,6 +62,12 @@ * CR#794205 * 2.2 bss 08/04/14 Updated driver tcl to add protection macros for * xparameters.h (CR#802257). +* 2.3 sk 12/15/14 Updated mdd file to delete �ffunction-sections & +* -fdata-sections flags from extra compiler flags CR#838648 +* Changed default os to latest version in mdd file. +* 2.4 nsk 11/05/15 Updated generate and post_generate procs in driver tcl +* not to generate cpu macros, when microblaze is connected +* as one of the streaming slaves to itself. CR#876604 * * * @@ -261,3 +270,4 @@ void XIo_OutSwap32(XIo_Address OutAddress, u32 Value); #endif #endif /* end of protection macro */ +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/Makefile b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/Makefile similarity index 84% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/Makefile rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/Makefile index 69f2191df..1822ca81d 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/Makefile +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/Makefile @@ -11,17 +11,16 @@ INCLUDES=-I./. -I${INCLUDEDIR} INCLUDEFILES=*.h LIBSOURCES=*.c -OUTS = *.o +OUTS = *.o libs: echo "Compiling emaclite" $(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES) - $(ARCHIVER) -r ${RELEASEDIR}/${LIB} ${OUTS} + $(ARCHIVER) -r ${RELEASEDIR}/${LIB} ${OUTS} make clean -include: +include: ${CP} $(INCLUDEFILES) $(INCLUDEDIR) clean: rm -rf ${OUTS} - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite.c similarity index 96% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite.c index 5b5381159..0a17e22d0 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite.c @@ -33,6 +33,8 @@ /** * * @file xemaclite.c +* @addtogroup emaclite_v4_1 +* @{ * * Functions in this file are the minimum required functions for the EmacLite * driver. See xemaclite.h for a detailed description of the driver. @@ -62,6 +64,9 @@ * 3.02a sdm 07/22/11 Removed redundant code in XEmacLite_Recv functions for * CR617290 * 3.04a srt 04/13/13 Removed warnings (CR 705000). +* 4.2 sk 11/10/15 Used UINTPTR instead of u32 for Baseaddress CR# 867425. +* Changed the prototypes of XEmacLite_GetReceiveDataLength, +* XEmacLite_CfgInitialize API's. * * ******************************************************************************/ @@ -82,7 +87,7 @@ /************************** Function Prototypes ******************************/ -static u16 XEmacLite_GetReceiveDataLength(u32 BaseAddress); +static u16 XEmacLite_GetReceiveDataLength(UINTPTR BaseAddress); /************************** Variable Definitions *****************************/ @@ -113,7 +118,7 @@ static u16 XEmacLite_GetReceiveDataLength(u32 BaseAddress); ******************************************************************************/ int XEmacLite_CfgInitialize(XEmacLite *InstancePtr, XEmacLite_Config *EmacLiteConfigPtr, - u32 EffectiveAddr) + UINTPTR EffectiveAddr) { /* @@ -185,8 +190,8 @@ int XEmacLite_CfgInitialize(XEmacLite *InstancePtr, int XEmacLite_Send(XEmacLite *InstancePtr, u8 *FramePtr, unsigned ByteCount) { u32 Register; - u32 BaseAddress; - u32 EmacBaseAddress; + UINTPTR BaseAddress; + UINTPTR EmacBaseAddress; u32 IntrEnableStatus; /* @@ -232,7 +237,7 @@ int XEmacLite_Send(XEmacLite *InstancePtr, u8 *FramePtr, unsigned ByteCount) /* * Write the frame to the buffer. */ - XEmacLite_AlignedWrite(FramePtr, (u32 *) BaseAddress, + XEmacLite_AlignedWrite(FramePtr, (UINTPTR *) BaseAddress, ByteCount); @@ -241,7 +246,7 @@ int XEmacLite_Send(XEmacLite *InstancePtr, u8 *FramePtr, unsigned ByteCount) */ XEmacLite_WriteReg(BaseAddress, XEL_TPLR_OFFSET, (ByteCount & (XEL_TPLR_LENGTH_MASK_HI | - XEL_TPLR_LENGTH_MASK_LO))); + XEL_TPLR_LENGTH_MASK_LO))); /* * Update the Tx Status Register to indicate that there is a @@ -285,7 +290,7 @@ int XEmacLite_Send(XEmacLite *InstancePtr, u8 *FramePtr, unsigned ByteCount) /* * Write the frame to the buffer. */ - XEmacLite_AlignedWrite(FramePtr, (u32 *) BaseAddress, + XEmacLite_AlignedWrite(FramePtr, (UINTPTR *) BaseAddress, ByteCount); /* @@ -361,7 +366,7 @@ u16 XEmacLite_Recv(XEmacLite *InstancePtr, u8 *FramePtr) u16 LengthType; u16 Length; u32 Register; - u32 BaseAddress; + UINTPTR BaseAddress; /* * Verify that each of the inputs are valid. @@ -460,7 +465,7 @@ u16 XEmacLite_Recv(XEmacLite *InstancePtr, u8 *FramePtr) /* * Field contains type other than IP or ARP, use max * frame size and let user parse it. - */ + */ Length = XEL_MAX_FRAME_SIZE; } @@ -475,7 +480,7 @@ u16 XEmacLite_Recv(XEmacLite *InstancePtr, u8 *FramePtr) /* * Read from the EmacLite. */ - XEmacLite_AlignedRead(((u32 *) (BaseAddress + XEL_RXBUFF_OFFSET)), + XEmacLite_AlignedRead(((UINTPTR *) (BaseAddress + XEL_RXBUFF_OFFSET)), FramePtr, Length); /* @@ -512,7 +517,7 @@ u16 XEmacLite_Recv(XEmacLite *InstancePtr, u8 *FramePtr) ******************************************************************************/ void XEmacLite_SetMacAddress(XEmacLite *InstancePtr, u8 *AddressPtr) { - u32 BaseAddress; + UINTPTR BaseAddress; /* * Verify that each of the inputs are valid. @@ -528,7 +533,7 @@ void XEmacLite_SetMacAddress(XEmacLite *InstancePtr, u8 *AddressPtr) * Copy the MAC address to the Transmit buffer. */ XEmacLite_AlignedWrite(AddressPtr, - (u32 *) BaseAddress, + (UINTPTR *) BaseAddress, XEL_MAC_ADDR_SIZE); /* @@ -610,8 +615,8 @@ int XEmacLite_TxBufferAvailable(XEmacLite *InstancePtr) /* - * Read the Tx Status of the second buffer register and determine if the - * buffer is available. + * Read the Tx Status of the second buffer register and determine if the + * buffer is available. */ if (InstancePtr->EmacLiteConfig.TxPingPong != 0) { Register = XEmacLite_GetTxStatus(InstancePtr->EmacLiteConfig. @@ -946,7 +951,7 @@ void XEmacLite_DisableLoopBack(XEmacLite *InstancePtr) * @note None. * ******************************************************************************/ -static u16 XEmacLite_GetReceiveDataLength(u32 BaseAddress) +static u16 XEmacLite_GetReceiveDataLength(UINTPTR BaseAddress) { u16 Length; @@ -965,3 +970,4 @@ static u16 XEmacLite_GetReceiveDataLength(u32 BaseAddress) return Length; } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite.h similarity index 96% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite.h index 4de21a59b..bed806698 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite.h @@ -33,6 +33,9 @@ /** * * @file xemaclite.h +* @addtogroup emaclite_v4_1 +* @{ +* @details * * The Xilinx Ethernet Lite (EmacLite) driver. This driver supports the Xilinx * Ethernet Lite 10/100 MAC (EmacLite). @@ -190,6 +193,15 @@ * driver is compiled with ARM toolchain. * 3.04a srt 04/13/13 Removed warnings (CR 705000). * 4.0 adk 19/12/13 Updated as per the New Tcl API's +* 4.1 nsk 07/13/15 Added Length check in XEmacLite_AlignedWrite function +* in xemaclite_l.c file to avoid extra write operation +* (CR 843707). +* 4.2 sk 11/10/15 Used UINTPTR instead of u32 for Baseaddress CR# 867425. +* Changed the prototype of XEmacLite_CfgInitialize API. +* 4.2 adk 11/18/15 Fix compilation errors due to conflicting data types +* CR#917930 +* 4.2 adk 29/02/16 Updated interrupt example to support Zynq and ZynqMP +* CR#938244. * * * @@ -229,7 +241,7 @@ extern "C" { */ typedef struct { u16 DeviceId; /**< Unique ID of device */ - u32 BaseAddress; /**< Device base address */ + UINTPTR BaseAddress; /**< Device base address */ u8 TxPingPong; /**< 1 if TX Pong buffer configured, 0 otherwise */ u8 RxPingPong; /**< 1 if RX Pong buffer configured, 0 otherwise */ u8 MdioInclude; /**< 1 if MDIO is enabled, 0 otherwise */ @@ -355,7 +367,7 @@ typedef struct { */ int XEmacLite_CfgInitialize(XEmacLite *InstancePtr, XEmacLite_Config *EmacLiteConfigPtr, - u32 EffectiveAddr); + UINTPTR EffectiveAddr); void XEmacLite_SetMacAddress(XEmacLite *InstancePtr, u8 *AddressPtr); int XEmacLite_TxBufferAvailable(XEmacLite *InstancePtr); void XEmacLite_FlushReceive(XEmacLite *InstancePtr); @@ -402,3 +414,4 @@ int XEmacLite_SelfTest(XEmacLite *InstancePtr); #endif /* end of protection macro */ +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_g.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_g.c similarity index 90% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_g.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_g.c index 9e9c1ea08..a082ce0fd 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_g.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_g.c @@ -5,7 +5,7 @@ * Version: * DO NOT EDIT. * -* Copyright (C) 2010-2015 Xilinx, Inc. All Rights Reserved.* +* Copyright (C) 2010-2016 Xilinx, Inc. All Rights Reserved.* *Permission is hereby granted, free of charge, to any person obtaining a copy *of this software and associated documentation files (the Software), to deal *in the Software without restriction, including without limitation the rights @@ -22,8 +22,8 @@ * *THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -*XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +*XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, *WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT *OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_i.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_i.h similarity index 96% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_i.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_i.h index 6bfa1714d..0eab0edb5 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_i.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_i.h @@ -32,6 +32,8 @@ /******************************************************************************/ /** * @file xemaclite_i.h +* @addtogroup emaclite_v4_1 +* @{ * * This header file contains internal identifiers, which are those shared * between the files of the driver. It is intended for internal use only. @@ -123,8 +125,8 @@ extern XEmacLite_Config XEmacLite_ConfigTable[]; /************************** Function Prototypes ******************************/ -void XEmacLite_AlignedWrite(void *SrcPtr, u32 *DestPtr, unsigned ByteCount); -void XEmacLite_AlignedRead(u32 *SrcPtr, void *DestPtr, unsigned ByteCount); +void XEmacLite_AlignedWrite(void *SrcPtr, UINTPTR *DestPtr, unsigned ByteCount); +void XEmacLite_AlignedRead(UINTPTR *SrcPtr, void *DestPtr, unsigned ByteCount); void StubHandler(void *CallBackRef); @@ -134,3 +136,4 @@ void StubHandler(void *CallBackRef); #endif #endif /* end of protection macro */ +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_intr.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_intr.c similarity index 98% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_intr.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_intr.c index 5f979e7e8..d42d4efeb 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_intr.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_intr.c @@ -33,6 +33,8 @@ /** * * @file xemaclite_intr.c +* @addtogroup emaclite_v4_1 +* @{ * * Functions in this file are for the interrupt driven processing functionality. * See xemaclite.h for a detailed description of the driver. @@ -52,6 +54,7 @@ * the HW. * 3.00a ktn 10/22/09 Updated file to use the HAL Processor APIs/macros. * The macros have been renamed to remove _m from the name. +* 4.2 sk 11/10/15 Used UINTPTR instead of u32 for Baseaddress CR# 867425. * * ******************************************************************************/ @@ -94,7 +97,7 @@ int XEmacLite_EnableInterrupts(XEmacLite *InstancePtr) { u32 Register; - u32 BaseAddress; + UINTPTR BaseAddress; /* * Verify that each of the inputs are valid. @@ -156,7 +159,7 @@ int XEmacLite_EnableInterrupts(XEmacLite *InstancePtr) void XEmacLite_DisableInterrupts(XEmacLite *InstancePtr) { u32 Register; - u32 BaseAddress; + UINTPTR BaseAddress; /* * Verify that each of the inputs are valid. @@ -216,7 +219,7 @@ void XEmacLite_InterruptHandler(void *InstancePtr) XEmacLite *EmacLitePtr; int TxCompleteIntr = FALSE; - u32 BaseAddress; + UINTPTR BaseAddress; u32 TxStatus; /* @@ -357,3 +360,4 @@ void XEmacLite_SetSendHandler(XEmacLite *InstancePtr, void *CallBackRef, InstancePtr->SendHandler = FuncPtr; InstancePtr->SendRef = CallBackRef; } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_l.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_l.c similarity index 91% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_l.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_l.c index 689c39675..6073e1328 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_l.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_l.c @@ -33,6 +33,8 @@ /** * * @file xemaclite_l.c +* @addtogroup emaclite_v4_1 +* @{ * * This file contains the minimal, polled functions to send and receive Ethernet * frames. @@ -52,6 +54,12 @@ * XEmacLite_AlignedRead functions to use volatile * variables so that they are not optimized. * 3.00a ktn 10/22/09 The macros have been renamed to remove _m from the name. +* 4.1 nsk 07/13/15 Added Length check in XEmacLite_AlignedWrite function +* to avoid extra write operation (CR 843707). +* 4.2 sk 11/10/15 Used UINTPTR instead of u32 for Baseaddress CR# 867425. +* Changed the prototypes of XEmacLite_SendFrame, +* XEmacLite_RecvFrame, XEmacLite_AlignedWrite, +* XEmacLite_AlignedRead APIs. * * * @@ -71,8 +79,8 @@ /***************** Macros (Inline Functions) Definitions *********************/ /************************** Function Prototypes ******************************/ -void XEmacLite_AlignedWrite(void *SrcPtr, u32 *DestPtr, unsigned ByteCount); -void XEmacLite_AlignedRead(u32 *SrcPtr, void *DestPtr, unsigned ByteCount); +void XEmacLite_AlignedWrite(void *SrcPtr, UINTPTR *DestPtr, unsigned ByteCount); +void XEmacLite_AlignedRead(UINTPTR *SrcPtr, void *DestPtr, unsigned ByteCount); /************************** Variable Definitions *****************************/ @@ -101,20 +109,20 @@ void XEmacLite_AlignedRead(u32 *SrcPtr, void *DestPtr, unsigned ByteCount); * The function does not take the different buffers into consideration. * ******************************************************************************/ -void XEmacLite_SendFrame(u32 BaseAddress, u8 *FramePtr, unsigned ByteCount) +void XEmacLite_SendFrame(UINTPTR BaseAddress, u8 *FramePtr, unsigned ByteCount) { u32 Register; /* * Write data to the EmacLite */ - XEmacLite_AlignedWrite(FramePtr, (u32 *) (BaseAddress), ByteCount); + XEmacLite_AlignedWrite(FramePtr, (UINTPTR *) (BaseAddress), ByteCount); /* * The frame is in the buffer, now send it */ XEmacLite_WriteReg(BaseAddress, XEL_TPLR_OFFSET, - (ByteCount & (XEL_TPLR_LENGTH_MASK_HI | + (ByteCount & (XEL_TPLR_LENGTH_MASK_HI | XEL_TPLR_LENGTH_MASK_LO))); @@ -156,7 +164,7 @@ void XEmacLite_SendFrame(u32 BaseAddress, u8 *FramePtr, unsigned ByteCount) * The function does not take the different buffers into consideration. * ******************************************************************************/ -u16 XEmacLite_RecvFrame(u32 BaseAddress, u8 *FramePtr) +u16 XEmacLite_RecvFrame(UINTPTR BaseAddress, u8 *FramePtr) { u16 LengthType; u16 Length; @@ -196,7 +204,7 @@ u16 XEmacLite_RecvFrame(u32 BaseAddress, u8 *FramePtr) /* * Read each byte from the EmacLite */ - XEmacLite_AlignedRead((u32 *) (BaseAddress + XEL_RXBUFF_OFFSET), + XEmacLite_AlignedRead((UINTPTR *) (BaseAddress + XEL_RXBUFF_OFFSET), FramePtr, Length); /* @@ -224,7 +232,7 @@ u16 XEmacLite_RecvFrame(u32 BaseAddress, u8 *FramePtr) * @note None. * ******************************************************************************/ -void XEmacLite_AlignedWrite(void *SrcPtr, u32 *DestPtr, unsigned ByteCount) +void XEmacLite_AlignedWrite(void *SrcPtr, UINTPTR *DestPtr, unsigned ByteCount) { unsigned Index; unsigned Length = ByteCount; @@ -364,9 +372,9 @@ void XEmacLite_AlignedWrite(void *SrcPtr, u32 *DestPtr, unsigned ByteCount) for (Index = 0; Index < Length; Index++) { *To8Ptr++ = *From8Ptr++; } - - *To32Ptr++ = AlignBuffer; - + if (Length) { + *To32Ptr++ = AlignBuffer; + } } /******************************************************************************/ @@ -384,7 +392,7 @@ void XEmacLite_AlignedWrite(void *SrcPtr, u32 *DestPtr, unsigned ByteCount) * @note None. * ******************************************************************************/ -void XEmacLite_AlignedRead(u32 *SrcPtr, void *DestPtr, unsigned ByteCount) +void XEmacLite_AlignedRead(UINTPTR *SrcPtr, void *DestPtr, unsigned ByteCount) { unsigned Index; unsigned Length = ByteCount; @@ -501,3 +509,4 @@ void XEmacLite_AlignedRead(u32 *SrcPtr, void *DestPtr, unsigned ByteCount) *To8Ptr++ = *From8Ptr++; } } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_l.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_l.h similarity index 97% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_l.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_l.h index a0b812105..eb1a5231a 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_l.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_l.h @@ -33,6 +33,8 @@ /** * * @file xemaclite_l.h +* @addtogroup emaclite_v4_1 +* @{ * * This header file contains identifiers and basic driver functions and macros * that can be used to access the Xilinx Ethernet Lite 10/100 MAC (EmacLite). @@ -71,6 +73,9 @@ * XEmacLite_mSetRxStatus changed to XEmacLite_SetRxStatus, * XEmacLite_mIsTxDone changed to XEmacLite_IsTxDone and * XEmacLite_mIsRxEmpty changed to XEmacLite_IsRxEmpty. +* 4.2 sk 11/10/15 Used UINTPTR instead of u32 for Baseaddress CR# 867425. +* Changed the prototypes of XEmacLite_SendFrame, +* XEmacLite_RecvFrame APIs. * * ******************************************************************************/ @@ -361,11 +366,12 @@ extern "C" { /************************** Function Prototypes ******************************/ -void XEmacLite_SendFrame(u32 BaseAddress, u8 *FramePtr, unsigned ByteCount); -u16 XEmacLite_RecvFrame(u32 BaseAddress, u8 *FramePtr); +void XEmacLite_SendFrame(UINTPTR BaseAddress, u8 *FramePtr, unsigned ByteCount); +u16 XEmacLite_RecvFrame(UINTPTR BaseAddress, u8 *FramePtr); #ifdef __cplusplus } #endif #endif /* end of protection macro */ +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_selftest.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_selftest.c similarity index 90% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_selftest.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_selftest.c index b8891b814..ada2cae79 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_selftest.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_selftest.c @@ -33,6 +33,8 @@ /** * * @file xemaclite_selftest.c +* @addtogroup emaclite_v4_1 +* @{ * * Function(s) in this file are the required functions for the EMAC Lite * driver sefftest for the hardware. @@ -46,6 +48,7 @@ * 1.01a ecm 01/31/04 First release * 1.11a mta 03/21/07 Updated to new coding style * 3.00a ktn 10/22/09 Updated driver to use the HAL Processor APIs/macros. +* 4.2 sk 11/10/15 Used UINTPTR instead of u32 for Baseaddress CR# 867425. * ******************************************************************************/ @@ -86,7 +89,7 @@ ******************************************************************************/ int XEmacLite_SelfTest(XEmacLite * InstancePtr) { - u32 BaseAddress; + UINTPTR BaseAddress; u8 Index; u8 TestString[4] = { 0xDE, 0xAD, 0xBE, 0xEF }; u8 ReturnString[4] = { 0x0, 0x0, 0x0, 0x0 }; @@ -106,9 +109,9 @@ int XEmacLite_SelfTest(XEmacLite * InstancePtr) * Write the TestString to the TX buffer in EMAC Lite then * back from the EMAC Lite and verify */ - XEmacLite_AlignedWrite(TestString, (u32 *) BaseAddress, + XEmacLite_AlignedWrite(TestString, (UINTPTR *) BaseAddress, sizeof(TestString)); - XEmacLite_AlignedRead((u32 *) BaseAddress, ReturnString, + XEmacLite_AlignedRead((UINTPTR *) BaseAddress, ReturnString, sizeof(ReturnString)); for (Index = 0; Index < 4; Index++) { @@ -132,9 +135,9 @@ int XEmacLite_SelfTest(XEmacLite * InstancePtr) * Write the TestString to the optional TX buffer in EMAC Lite * then back from the EMAC Lite and verify */ - XEmacLite_AlignedWrite(TestString, (u32 *) BaseAddress, + XEmacLite_AlignedWrite(TestString, (UINTPTR *) BaseAddress, sizeof(TestString)); - XEmacLite_AlignedRead((u32 *) BaseAddress, ReturnString, + XEmacLite_AlignedRead((UINTPTR *) BaseAddress, ReturnString, sizeof(ReturnString)); for (Index = 0; Index < 4; Index++) { @@ -160,9 +163,9 @@ int XEmacLite_SelfTest(XEmacLite * InstancePtr) * Write the TestString to the RX buffer in EMAC Lite then * back from the EMAC Lite and verify */ - XEmacLite_AlignedWrite(TestString, (u32 *) (BaseAddress), + XEmacLite_AlignedWrite(TestString, (UINTPTR *) (BaseAddress), sizeof(TestString)); - XEmacLite_AlignedRead((u32 *) (BaseAddress), ReturnString, + XEmacLite_AlignedRead((UINTPTR *) (BaseAddress), ReturnString, sizeof(ReturnString)); for (Index = 0; Index < 4; Index++) { @@ -186,9 +189,9 @@ int XEmacLite_SelfTest(XEmacLite * InstancePtr) * Write the TestString to the optional RX buffer in EMAC Lite * then back from the EMAC Lite and verify */ - XEmacLite_AlignedWrite(TestString, (u32 *) BaseAddress, + XEmacLite_AlignedWrite(TestString, (UINTPTR *) BaseAddress, sizeof(TestString)); - XEmacLite_AlignedRead((u32 *) BaseAddress, ReturnString, + XEmacLite_AlignedRead((UINTPTR *) BaseAddress, ReturnString, sizeof(ReturnString)); for (Index = 0; Index < 4; Index++) { @@ -206,3 +209,4 @@ int XEmacLite_SelfTest(XEmacLite * InstancePtr) return XST_SUCCESS; } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_sinit.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_sinit.c similarity index 99% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_sinit.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_sinit.c index 4c3df772e..73fd46014 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_0/src/xemaclite_sinit.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/emaclite_v4_2/src/xemaclite_sinit.c @@ -33,6 +33,8 @@ /** * * @file xemaclite_sinit.c +* @addtogroup emaclite_v4_1 +* @{ * * This file contains the implementation of the XEmacLite driver's static * initialization functionality. @@ -151,3 +153,4 @@ int XEmacLite_Initialize(XEmacLite *InstancePtr, u16 DeviceId) } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/Makefile b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/Makefile similarity index 100% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/Makefile rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/Makefile diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio.c similarity index 96% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio.c index 6df98d000..b9f4beb0a 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -32,6 +32,8 @@ /*****************************************************************************/ /** * @file xgpio.c +* @addtogroup gpio_v4_1 +* @{ * * The implementation of the XGpio driver's basic functionality. See xgpio.h * for more information about the driver. @@ -58,6 +60,8 @@ * 2.12a sv 11/21/07 Updated driver to support access through DCR bus * 3.00a sv 11/21/09 Updated to use HAL Processor APIs. Renamed the * macros to remove _m from the name. +* 4.1 lks 11/18/15 Clean up of the comments in the code and +* removed support for DCR bridge * * *****************************************************************************/ @@ -106,7 +110,7 @@ * address instead. * * @return -* - XST_SUCCESS Initialization was successfull. +* - XST_SUCCESS if the initialization is successfull. * * @note None. * @@ -114,19 +118,11 @@ int XGpio_CfgInitialize(XGpio * InstancePtr, XGpio_Config * Config, u32 EffectiveAddr) { - /* - * Assert arguments - */ + /* Assert arguments */ Xil_AssertNonvoid(InstancePtr != NULL); - /* - * Set some default values. - */ -#if (XPAR_XGPIO_USE_DCR_BRIDGE != 0) - InstancePtr->BaseAddress = ((EffectiveAddr >> 2)) & 0xFFF; -#else + /* Set some default values. */ InstancePtr->BaseAddress = EffectiveAddr; -#endif InstancePtr->InterruptPresent = Config->InterruptPresent; InstancePtr->IsDual = Config->IsDual; @@ -157,7 +153,7 @@ int XGpio_CfgInitialize(XGpio * InstancePtr, XGpio_Config * Config, * function will assert. * *****************************************************************************/ -void XGpio_SetDataDirection(XGpio * InstancePtr, unsigned Channel, +void XGpio_SetDataDirection(XGpio *InstancePtr, unsigned Channel, u32 DirectionMask) { Xil_AssertVoid(InstancePtr != NULL); @@ -253,3 +249,4 @@ void XGpio_DiscreteWrite(XGpio * InstancePtr, unsigned Channel, u32 Data) ((Channel - 1) * XGPIO_CHAN_OFFSET) + XGPIO_DATA_OFFSET, Data); } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio.h similarity index 96% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio.h index 5116edb25..a7628d57d 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -32,6 +32,9 @@ /*****************************************************************************/ /** * @file xgpio.h +* @addtogroup gpio_v4_1 +* @{ +* @details * * This file contains the software API definition of the Xilinx General Purpose * I/O (XGpio) device driver. @@ -100,6 +103,10 @@ * 3.01a bss 04/18/13 Updated driver tcl to generate Canonical params in * xparameters.h. CR#698589 * 4.0 adk 19/12/13 Updated as per the New Tcl API's +* 4.1 lks 11/18/15 Updated to use cannonical xparameters in examples and +* clean up of the comments, removed support for DCR bridge +* and removed xgpio_intr_example for CR 900381 +* * *****************************************************************************/ @@ -193,3 +200,4 @@ u32 XGpio_InterruptGetStatus(XGpio *InstancePtr); #endif #endif /* end of protection macro */ +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_extra.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_extra.c similarity index 96% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_extra.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_extra.c index 9c8a6b580..915ccd41f 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_extra.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_extra.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -32,6 +32,8 @@ /*****************************************************************************/ /** * @file xgpio_extra.c +* @addtogroup gpio_v4_1 +* @{ * * The implementation of the XGpio driver's advanced discrete functions. * See xgpio.h for more information about the driver. @@ -104,9 +106,7 @@ void XGpio_DiscreteSet(XGpio * InstancePtr, unsigned Channel, u32 Mask) Xil_AssertVoid((Channel == 1) || ((Channel == 2) && (InstancePtr->IsDual == TRUE))); - /* - * Calculate the offset to the data register of the GPIO once - */ + /* Calculate the offset to the data register of the GPIO */ DataOffset = ((Channel - 1) * XGPIO_CHAN_OFFSET) + XGPIO_DATA_OFFSET; /* @@ -150,9 +150,7 @@ void XGpio_DiscreteClear(XGpio * InstancePtr, unsigned Channel, u32 Mask) Xil_AssertVoid((Channel == 1) || ((Channel == 2) && (InstancePtr->IsDual == TRUE))); - /* - * Calculate the offset to the data register of the GPIO once - */ + /* Calculate the offset to the data register of the GPIO */ DataOffset = ((Channel - 1) * XGPIO_CHAN_OFFSET) + XGPIO_DATA_OFFSET; /* @@ -163,3 +161,4 @@ void XGpio_DiscreteClear(XGpio * InstancePtr, unsigned Channel, u32 Mask) Current &= ~Mask; XGpio_WriteReg(InstancePtr->BaseAddress, DataOffset, Current); } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_g.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_g.c similarity index 90% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_g.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_g.c index b508b8dcd..219b80d7f 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_g.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_g.c @@ -5,7 +5,7 @@ * Version: * DO NOT EDIT. * -* Copyright (C) 2010-2015 Xilinx, Inc. All Rights Reserved.* +* Copyright (C) 2010-2016 Xilinx, Inc. All Rights Reserved.* *Permission is hereby granted, free of charge, to any person obtaining a copy *of this software and associated documentation files (the Software), to deal *in the Software without restriction, including without limitation the rights @@ -22,8 +22,8 @@ * *THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -*XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +*XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, *WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT *OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_i.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_i.h similarity index 96% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_i.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_i.h index a94bec41a..5e18e0c8d 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_i.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_i.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -32,6 +32,8 @@ /******************************************************************************/ /** * @file xgpio_i.h +* @addtogroup gpio_v4_1 +* @{ * * This header file contains internal identifiers, which are those shared * between the files of the driver. It is intended for internal use only. @@ -82,3 +84,4 @@ extern XGpio_Config XGpio_ConfigTable[]; #endif #endif /* end of protection macro */ +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_intr.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_intr.c similarity index 97% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_intr.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_intr.c index f53a36969..11ce9a94c 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_intr.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_intr.c @@ -32,6 +32,8 @@ /*****************************************************************************/ /** * @file xgpio_intr.c +* @addtogroup gpio_v4_1 +* @{ * * Implements GPIO interrupt processing functions for the XGpio driver. * See xgpio.h for more information about the driver. @@ -88,7 +90,7 @@ * @note None. * *****************************************************************************/ -void XGpio_InterruptGlobalEnable(XGpio * InstancePtr) +void XGpio_InterruptGlobalEnable(XGpio *InstancePtr) { Xil_AssertVoid(InstancePtr != NULL); Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); @@ -115,7 +117,7 @@ void XGpio_InterruptGlobalEnable(XGpio * InstancePtr) * @note None. * *****************************************************************************/ -void XGpio_InterruptGlobalDisable(XGpio * InstancePtr) +void XGpio_InterruptGlobalDisable(XGpio *InstancePtr) { Xil_AssertVoid(InstancePtr != NULL); Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); @@ -143,7 +145,7 @@ void XGpio_InterruptGlobalDisable(XGpio * InstancePtr) * @note None. * *****************************************************************************/ -void XGpio_InterruptEnable(XGpio * InstancePtr, u32 Mask) +void XGpio_InterruptEnable(XGpio *InstancePtr, u32 Mask) { u32 Register; @@ -179,7 +181,7 @@ void XGpio_InterruptEnable(XGpio * InstancePtr, u32 Mask) * @note None. * *****************************************************************************/ -void XGpio_InterruptDisable(XGpio * InstancePtr, u32 Mask) +void XGpio_InterruptDisable(XGpio *InstancePtr, u32 Mask) { u32 Register; @@ -289,3 +291,4 @@ u32 XGpio_InterruptGetStatus(XGpio * InstancePtr) return XGpio_ReadReg(InstancePtr->BaseAddress, XGPIO_ISR_OFFSET); } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_l.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_l.h similarity index 88% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_l.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_l.h index 3f4e82ee7..d2032a4dd 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_l.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_l.h @@ -33,6 +33,8 @@ /** * * @file xgpio_l.h +* @addtogroup gpio_v4_1 +* @{ * * This header file contains identifiers and driver functions (or * macros) that can be used to access the device. The user should refer to the @@ -66,6 +68,7 @@ * XGpio_mGetDataReg and XGpio_mSetDataReg. Users * should use XGpio_WriteReg/XGpio_ReadReg to achieve the * same functionality. +* 4.1 lks 11/18/15 Removed support for DCR bridge * * ******************************************************************************/ @@ -83,16 +86,6 @@ extern "C" { #include "xil_assert.h" #include "xil_io.h" -/* - * XPAR_XGPIO_USE_DCR_BRIDGE has to be set to 1 if the GPIO device is - * accessed through a DCR bus connected to a bridge - */ -#define XPAR_XGPIO_USE_DCR_BRIDGE 0 - - -#if (XPAR_XGPIO_USE_DCR_BRIDGE != 0) -#include "xio_dcr.h" -#endif /************************** Constant Definitions *****************************/ @@ -101,19 +94,6 @@ extern "C" { * Register offsets for this device. * @{ */ -#if (XPAR_XGPIO_USE_DCR_BRIDGE != 0) - -#define XGPIO_DATA_OFFSET 0x0 /**< Data register for 1st channel */ -#define XGPIO_TRI_OFFSET 0x1 /**< I/O direction reg for 1st channel */ -#define XGPIO_DATA2_OFFSET 0x2 /**< Data register for 2nd channel */ -#define XGPIO_TRI2_OFFSET 0x3 /**< I/O direction reg for 2nd channel */ - -#define XGPIO_GIE_OFFSET 0x47 /**< Global interrupt enable register */ -#define XGPIO_ISR_OFFSET 0x48 /**< Interrupt status register */ -#define XGPIO_IER_OFFSET 0x4A /**< Interrupt enable register */ - -#else - #define XGPIO_DATA_OFFSET 0x0 /**< Data register for 1st channel */ #define XGPIO_TRI_OFFSET 0x4 /**< I/O direction reg for 1st channel */ #define XGPIO_DATA2_OFFSET 0x8 /**< Data register for 2nd channel */ @@ -123,8 +103,6 @@ extern "C" { #define XGPIO_ISR_OFFSET 0x120 /**< Interrupt status register */ #define XGPIO_IER_OFFSET 0x128 /**< Interrupt enable register */ -#endif - /* @} */ /* The following constant describes the offset of each channels data and @@ -159,21 +137,9 @@ extern "C" { /***************** Macros (Inline Functions) Definitions *********************/ - /* - * Define the appropriate I/O access method to memory mapped I/O or DCR. - */ -#if (XPAR_XGPIO_USE_DCR_BRIDGE != 0) - -#define XGpio_In32 XIo_DcrIn -#define XGpio_Out32 XIo_DcrOut - -#else - #define XGpio_In32 Xil_In32 #define XGpio_Out32 Xil_Out32 -#endif - /****************************************************************************/ /** @@ -224,3 +190,4 @@ extern "C" { #endif #endif /* end of protection macro */ +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_selftest.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_selftest.c similarity index 99% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_selftest.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_selftest.c index 798f18064..69cab70f9 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_selftest.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_selftest.c @@ -32,6 +32,8 @@ /*****************************************************************************/ /** * @file xgpio_selftest.c +* @addtogroup gpio_v4_1 +* @{ * * The implementation of the XGpio driver's self test function. * See xgpio.h for more information about the driver. @@ -105,3 +107,4 @@ int XGpio_SelfTest(XGpio * InstancePtr) return (XST_SUCCESS); } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_sinit.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_sinit.c similarity index 95% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_sinit.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_sinit.c index 514633585..52bab6bde 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_0/src/xgpio_sinit.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/gpio_v4_1/src/xgpio_sinit.c @@ -32,6 +32,8 @@ /*****************************************************************************/ /** * @file xgpio_sinit.c +* @addtogroup gpio_v4_1 +* @{ * * The implementation of the XGpio driver's static initialzation * functionality. @@ -47,6 +49,8 @@ * ----- ---- -------- ----------------------------------------------- * 2.01a jvb 10/13/05 First release * 2.11a mta 03/21/07 Updated to new coding style +* 4.0 sha 07/15/15 Defined macro XPAR_XGPIO_NUM_INSTANCES if not +* defined in xparameters.h * * *****************************************************************************/ @@ -59,6 +63,10 @@ /************************** Constant Definitions ****************************/ +#ifndef XPAR_XGPIO_NUM_INSTANCES +#define XPAR_XGPIO_NUM_INSTANCES 0 +#endif + /**************************** Type Definitions ******************************/ /***************** Macros (Inline Functions) Definitions ********************/ @@ -148,3 +156,4 @@ int XGpio_Initialize(XGpio * InstancePtr, u16 DeviceId) return XGpio_CfgInitialize(InstancePtr, ConfigPtr, ConfigPtr->BaseAddress); } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/Makefile b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/Makefile deleted file mode 100644 index 7b8304542..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -COMPILER= -ARCHIVER= -CP=cp -COMPILER_FLAGS= -EXTRA_COMPILER_FLAGS= -LIB=libxil.a -LEVEL=0 - -RELEASEDIR=../../../lib -INCLUDEDIR=../../../include -INCLUDES=-I./. -I${INCLUDEDIR} - -INCLUDEFILES=*.h -LIBSOURCES=*.c - -OUTS = *.o - -libs: - echo "Compiling intc" - $(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES) - $(ARCHIVER) -r ${RELEASEDIR}/${LIB} ${OUTS} - make clean - -include: - ${CP} $(INCLUDEFILES) $(INCLUDEDIR) - -clean: - rm -rf ${OUTS} - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc.c deleted file mode 100644 index a6d1b7872..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc.c +++ /dev/null @@ -1,1078 +0,0 @@ -/****************************************************************************** -* -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xintc.c -* -* Contains required functions for the XIntc driver for the Xilinx Interrupt -* Controller. See xintc.h for a detailed description of the driver. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- --------------------------------------------------------
-* 1.00a ecm  08/16/01 First release
-* 1.00b jhl  02/21/02 Repartitioned the driver for smaller files
-* 1.00b jhl  04/24/02 Made LookupConfig global and compressed ack before table
-*                     in the configuration into a bit mask
-* 1.00c rpm  10/17/03 New release. Support the static vector table created
-*                     in the xintc_g.c configuration table.
-* 1.00c rpm  04/23/04 Removed check in XIntc_Connect for a previously connected
-*                     handler. Always overwrite the vector table handler with
-*                     the handler provided as an argument.
-* 1.10c mta  03/21/07 Updated to new coding style
-* 1.11a sv   11/21/07 Updated driver to support access through a DCR bridge
-* 2.00a ktn  10/20/09 Updated to use HAL Processor APIs.
-* 2.04a bss  01/13/12 Added XIntc_ConnectFastHandler API for Fast Interrupt
-*		      and XIntc_SetNormalIntrMode for setting to normal
-*		      interrupt mode.
-* 2.05a bss  08/16/12 Updated to support relocatable vectors in Microblaze,
-*		      updated XIntc_SetNormalIntrMode to use IntVectorAddr
-*		      which is the interrupt vector address
-* 2.06a bss  01/28/13 To support Cascade mode:
-*		      Modified XIntc_Initialize,XIntc_Start,XIntc_Connect
-*		      XIntc_Disconnect,XIntc_Enable,XIntc_Disable,
-*		      XIntc_Acknowledge,XIntc_ConnectFastHandler and
-*		      XIntc_SetNormalIntrMode APIs.
-*		      Added XIntc_InitializeSlaves API.
-* 3.0   bss  01/28/13 Modified to initialize IVAR register with
-*		      XPAR_MICROBLAZE_BASE_VECTORS + 0x10 to fix
-*		      CR#765931
-*
-* 
-* -******************************************************************************/ - -/***************************** Include Files *********************************/ - -#include "xil_types.h" -#include "xil_assert.h" -#include "xintc.h" -#include "xintc_l.h" -#include "xintc_i.h" - -/************************** Constant Definitions *****************************/ - - -/**************************** Type Definitions *******************************/ - - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Variable Definitions *****************************/ - -/* - * Array of masks associated with the bit position, improves performance - * in the ISR and acknowledge functions, this table is shared between all - * instances of the driver. XIN_CONTROLLER_MAX_INTRS is the maximum number of - * sources of Interrupt controller - */ -u32 XIntc_BitPosMask[XIN_CONTROLLER_MAX_INTRS]; - -/************************** Function Prototypes ******************************/ - -static void StubHandler(void *CallBackRef); -static void XIntc_InitializeSlaves(XIntc * InstancePtr); - -/*****************************************************************************/ -/** -* -* Initialize a specific interrupt controller instance/driver. The -* initialization entails: -* -* - Initialize fields of the XIntc structure -* - Initial vector table with stub function calls -* - All interrupt sources are disabled -* - Interrupt output is disabled -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* @param DeviceId is the unique id of the device controlled by this XIntc -* instance. Passing in a device id associates the generic XIntc -* instance to a specific device, as chosen by the caller or -* application developer. -* -* @return -* - XST_SUCCESS if initialization was successful -* - XST_DEVICE_IS_STARTED if the device has already been started -* - XST_DEVICE_NOT_FOUND if device configuration information was -* not found for a device with the supplied device ID. -* -* @note In Cascade mode this function calls XIntc_InitializeSlaves to -* initialiaze Slave Interrupt controllers. -* -******************************************************************************/ -int XIntc_Initialize(XIntc * InstancePtr, u16 DeviceId) -{ - u8 Id; - XIntc_Config *CfgPtr; - u32 NextBitMask = 1; - - Xil_AssertNonvoid(InstancePtr != NULL); - - /* - * If the device is started, disallow the initialize and return a status - * indicating it is started. This allows the user to stop the device - * and reinitialize, but prevents a user from inadvertently initializing - */ - if (InstancePtr->IsStarted == XIL_COMPONENT_IS_STARTED) { - return XST_DEVICE_IS_STARTED; - } - - /* - * Lookup the device configuration in the CROM table. Use this - * configuration info down below when initializing this component. - */ - CfgPtr = XIntc_LookupConfig(DeviceId); - if (CfgPtr == NULL) { - return XST_DEVICE_NOT_FOUND; - } - - /* - * Set some default values - */ - InstancePtr->IsReady = 0; - InstancePtr->IsStarted = 0; /* not started */ - InstancePtr->CfgPtr = CfgPtr; - - InstancePtr->CfgPtr->Options = XIN_SVC_SGL_ISR_OPTION; - InstancePtr->CfgPtr->IntcType = CfgPtr->IntcType; - - /* - * Save the base address pointer such that the registers of the - * interrupt can be accessed - */ -#if (XPAR_XINTC_USE_DCR_BRIDGE != 0) - InstancePtr->BaseAddress = ((CfgPtr->BaseAddress >> 2)) & 0xFFF; -#else - InstancePtr->BaseAddress = CfgPtr->BaseAddress; -#endif - - /* - * Initialize all the data needed to perform interrupt processing for - * each interrupt ID up to the maximum used - */ - for (Id = 0; Id < CfgPtr->NumberofIntrs; Id++) { - - /* - * Initalize the handler to point to a stub to handle an - * interrupt which has not been connected to a handler. Only - * initialize it if the handler is 0 or XNullHandler, which - * means it was not initialized statically by the tools/user. - * Set the callback reference to this instance so that - * unhandled interrupts can be tracked. - */ - if ((InstancePtr->CfgPtr->HandlerTable[Id].Handler == 0) || - (InstancePtr->CfgPtr->HandlerTable[Id].Handler == - XNullHandler)) { - InstancePtr->CfgPtr->HandlerTable[Id].Handler = - StubHandler; - } - InstancePtr->CfgPtr->HandlerTable[Id].CallBackRef = InstancePtr; - - /* - * Initialize the bit position mask table such that bit - * positions are lookups only for each interrupt id, with 0 - * being a special case - * (XIntc_BitPosMask[] = { 1, 2, 4, 8, ... }) - */ - XIntc_BitPosMask[Id] = NextBitMask; - NextBitMask *= 2; - } - - /* - * Disable IRQ output signal - * Disable all interrupt sources - * Acknowledge all sources - */ - XIntc_Out32(InstancePtr->BaseAddress + XIN_MER_OFFSET, 0); - XIntc_Out32(InstancePtr->BaseAddress + XIN_IER_OFFSET, 0); - XIntc_Out32(InstancePtr->BaseAddress + XIN_IAR_OFFSET, 0xFFFFFFFF); - - /* - * If the fast Interrupt mode is enabled then set all the - * interrupts as normal mode. - */ - if(InstancePtr->CfgPtr->FastIntr == TRUE) { - XIntc_Out32(InstancePtr->BaseAddress + XIN_IMR_OFFSET, 0); - -#ifdef XPAR_MICROBLAZE_BASE_VECTORS - for (Id = 0; Id < 32 ; Id++) - { - XIntc_Out32(InstancePtr->BaseAddress + XIN_IVAR_OFFSET - + (Id * 4), XPAR_MICROBLAZE_BASE_VECTORS - + 0x10); - } -#else - for (Id = 0; Id < 32 ; Id++) - { - XIntc_Out32(InstancePtr->BaseAddress + XIN_IVAR_OFFSET - + (Id * 4), 0x10); - } -#endif - } - - /* Initialize slaves in Cascade mode*/ - if (InstancePtr->CfgPtr->IntcType != XIN_INTC_NOCASCADE) { - XIntc_InitializeSlaves(InstancePtr); - } - - /* - * Indicate the instance is now ready to use, successfully initialized - */ - InstancePtr->IsReady = XIL_COMPONENT_IS_READY; - - return XST_SUCCESS; -} - -/*****************************************************************************/ -/** -* -* Starts the interrupt controller by enabling the output from the controller -* to the processor. Interrupts may be generated by the interrupt controller -* after this function is called. -* -* It is necessary for the caller to connect the interrupt handler of this -* component to the proper interrupt source. This function also starts Slave -* controllers in Cascade mode. -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* @param Mode determines if software is allowed to simulate interrupts or -* real interrupts are allowed to occur. Note that these modes are -* mutually exclusive. The interrupt controller hardware resets in -* a mode that allows software to simulate interrupts until this -* mode is exited. It cannot be reentered once it has been exited. -* -* One of the following values should be used for the mode. -* - XIN_SIMULATION_MODE enables simulation of interrupts only -* - XIN_REAL_MODE enables hardware interrupts only -* -* @return -* - XST_SUCCESS if the device was started successfully -* - XST_FAILURE if simulation mode was specified and it could not -* be set because real mode has already been entered. -* -* @note Must be called after XIntc initialization is completed. -* -******************************************************************************/ -int XIntc_Start(XIntc * InstancePtr, u8 Mode) -{ - u32 MasterEnable = XIN_INT_MASTER_ENABLE_MASK; - XIntc_Config *CfgPtr; - int Index; - - /* - * Assert the arguments - */ - Xil_AssertNonvoid(InstancePtr != NULL); - Xil_AssertNonvoid((Mode == XIN_SIMULATION_MODE) || - (Mode == XIN_REAL_MODE)) - Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - /* - * Check for simulation mode - */ - if (Mode == XIN_SIMULATION_MODE) { - if (MasterEnable & XIN_INT_HARDWARE_ENABLE_MASK) { - return XST_FAILURE; - } - } - else { - MasterEnable |= XIN_INT_HARDWARE_ENABLE_MASK; - } - - /* - * Indicate the instance is ready to be used and is started before we - * enable the device. - */ - InstancePtr->IsStarted = XIL_COMPONENT_IS_STARTED; - - /* Start the Slaves for Cascade Mode */ - if (InstancePtr->CfgPtr->IntcType != XIN_INTC_NOCASCADE) { - for (Index = 1; Index <= XPAR_XINTC_NUM_INSTANCES - 1; Index++) - { - CfgPtr = XIntc_LookupConfig(Index); - XIntc_Out32(CfgPtr->BaseAddress + XIN_MER_OFFSET, - MasterEnable); - } - } - - /* Start the master */ - XIntc_Out32(InstancePtr->BaseAddress + XIN_MER_OFFSET, MasterEnable); - - return XST_SUCCESS; -} - -/*****************************************************************************/ -/** -* -* Stops the interrupt controller by disabling the output from the controller -* so that no interrupts will be caused by the interrupt controller. -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* -* @return None. -* -* @note None. -* -******************************************************************************/ -void XIntc_Stop(XIntc * InstancePtr) -{ - /* - * Assert the arguments - */ - Xil_AssertVoid(InstancePtr != NULL); - Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - /* - * Stop all interrupts from occurring thru the interrupt controller by - * disabling all interrupts in the MER register - */ - XIntc_Out32(InstancePtr->BaseAddress + XIN_MER_OFFSET, 0); - - InstancePtr->IsStarted = 0; -} - -/*****************************************************************************/ -/** -* -* Makes the connection between the Id of the interrupt source and the -* associated handler that is to run when the interrupt is recognized. The -* argument provided in this call as the Callbackref is used as the argument -* for the handler when it is called. In Cascade mode, connects handler to -* Slave controller handler table depending on the interrupt Id. -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* @param Id contains the ID of the interrupt source and should be in the -* range of 0 to XPAR_INTC_MAX_NUM_INTR_INPUTS - 1 with 0 being -* the highest priority interrupt. -* @param Handler to the handler for that interrupt. -* @param CallBackRef is the callback reference, usually the instance -* pointer of the connecting driver. -* -* @return -* -* - XST_SUCCESS if the handler was connected correctly. -* -* @note -* -* WARNING: The handler provided as an argument will overwrite any handler -* that was previously connected. -* -****************************************************************************/ -int XIntc_Connect(XIntc * InstancePtr, u8 Id, - XInterruptHandler Handler, void *CallBackRef) -{ - XIntc_Config *CfgPtr; - /* - * Assert the arguments - */ - Xil_AssertNonvoid(InstancePtr != NULL); - Xil_AssertNonvoid(Id < XPAR_INTC_MAX_NUM_INTR_INPUTS); - Xil_AssertNonvoid(Handler != NULL); - Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - /* Connect Handlers for Slave controllers in Cascade Mode */ - if (Id > 31) { - - CfgPtr = XIntc_LookupConfig(Id/32); - - CfgPtr->HandlerTable[Id%32].Handler = Handler; - CfgPtr->HandlerTable[Id%32].CallBackRef = CallBackRef; - } - /* Connect Handlers for Master/primary controller */ - else { - /* - * The Id is used as an index into the table to select the - * proper handler - */ - InstancePtr->CfgPtr->HandlerTable[Id].Handler = Handler; - InstancePtr->CfgPtr->HandlerTable[Id].CallBackRef = - CallBackRef; - } - - return XST_SUCCESS; -} - -/*****************************************************************************/ -/** -* -* Updates the interrupt table with the Null Handler and NULL arguments at the -* location pointed at by the Id. This effectively disconnects that interrupt -* source from any handler. The interrupt is disabled also. In Cascade mode, -* disconnects handler from Slave controller handler table depending on the -* interrupt Id. -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* @param Id contains the ID of the interrupt source and should be in the -* range of 0 to XPAR_INTC_MAX_NUM_INTR_INPUTS - 1 with 0 being -* the highest priority interrupt. -* -* @return None. -* -* @note None. -* -****************************************************************************/ -void XIntc_Disconnect(XIntc * InstancePtr, u8 Id) -{ - u32 CurrentIER; - u32 Mask; - XIntc_Config *CfgPtr; - - /* - * Assert the arguments - */ - Xil_AssertVoid(InstancePtr != NULL); - Xil_AssertVoid(Id < XPAR_INTC_MAX_NUM_INTR_INPUTS); - Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - /* - * Disable the interrupt such that it won't occur while disconnecting - * the handler, only disable the specified interrupt id without - * modifying the other interrupt ids - */ - - /* Disconnect Handlers for Slave controllers in Cascade Mode */ - if (Id > 31) { - - CfgPtr = XIntc_LookupConfig(Id/32); - - CurrentIER = XIntc_In32(CfgPtr->BaseAddress + XIN_IER_OFFSET); - - /* Convert from integer id to bit mask */ - Mask = XIntc_BitPosMask[(Id%32)]; - - XIntc_Out32(CfgPtr->BaseAddress + XIN_IER_OFFSET, - (CurrentIER & ~Mask)); - /* - * Disconnect the handler and connect a stub, the callback - * reference must be set to this instance to allow unhandled - * interrupts to be tracked - */ - CfgPtr->HandlerTable[Id%32].Handler = StubHandler; - CfgPtr->HandlerTable[Id%32].CallBackRef = InstancePtr; - } - /* Disconnect Handlers for Master/primary controller */ - else { - CurrentIER = XIntc_In32(InstancePtr->BaseAddress + - XIN_IER_OFFSET); - - /* Convert from integer id to bit mask */ - Mask = XIntc_BitPosMask[Id]; - - XIntc_Out32(InstancePtr->BaseAddress + XIN_IER_OFFSET, - (CurrentIER & ~Mask)); - InstancePtr->CfgPtr->HandlerTable[Id%32].Handler = - StubHandler; - InstancePtr->CfgPtr->HandlerTable[Id%32].CallBackRef = - InstancePtr; - } - -} - -/*****************************************************************************/ -/** -* -* Enables the interrupt source provided as the argument Id. Any pending -* interrupt condition for the specified Id will occur after this function is -* called. In Cascade mode, enables corresponding interrupt of Slave controllers -* depending on the Id. -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* @param Id contains the ID of the interrupt source and should be in the -* range of 0 to XPAR_INTC_MAX_NUM_INTR_INPUTS - 1 with 0 being -* the highest priority interrupt. -* -* @return None. -* -* @note None. -* -****************************************************************************/ -void XIntc_Enable(XIntc * InstancePtr, u8 Id) -{ - u32 CurrentIER; - u32 Mask; - XIntc_Config *CfgPtr; - - /* - * Assert the arguments - */ - Xil_AssertVoid(InstancePtr != NULL); - Xil_AssertVoid(Id < XPAR_INTC_MAX_NUM_INTR_INPUTS); - Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - if (Id > 31) { - - /* Enable user required Id in Slave controller */ - CfgPtr = XIntc_LookupConfig(Id/32); - - CurrentIER = XIntc_In32(CfgPtr->BaseAddress + XIN_IER_OFFSET); - - /* Convert from integer id to bit mask */ - Mask = XIntc_BitPosMask[(Id%32)]; - - XIntc_Out32(CfgPtr->BaseAddress + XIN_IER_OFFSET, - (CurrentIER | Mask)); - } - else { - /* - * The Id is used to create the appropriate mask for the - * desired bit position. - */ - Mask = XIntc_BitPosMask[Id]; - - /* - * Enable the selected interrupt source by reading the - * interrupt enable register and then modifying only the - * specified interrupt id enable - */ - CurrentIER = XIntc_In32(InstancePtr->BaseAddress + - XIN_IER_OFFSET); - XIntc_Out32(InstancePtr->BaseAddress + XIN_IER_OFFSET, - (CurrentIER | Mask)); - } -} - -/*****************************************************************************/ -/** -* -* Disables the interrupt source provided as the argument Id such that the -* interrupt controller will not cause interrupts for the specified Id. The -* interrupt controller will continue to hold an interrupt condition for the -* Id, but will not cause an interrupt.In Cascade mode, disables corresponding -* interrupt of Slave controllers depending on the Id. -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* @param Id contains the ID of the interrupt source and should be in the -* range of 0 to XPAR_INTC_MAX_NUM_INTR_INPUTS - 1 with 0 being the -* highest priority interrupt. -* -* @return None. -* -* @note None. -* -****************************************************************************/ -void XIntc_Disable(XIntc * InstancePtr, u8 Id) -{ - u32 CurrentIER; - u32 Mask; - XIntc_Config *CfgPtr; - - /* - * Assert the arguments - */ - Xil_AssertVoid(InstancePtr != NULL); - Xil_AssertVoid(Id < XPAR_INTC_MAX_NUM_INTR_INPUTS); - Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - if (Id > 31) { - /* Enable user required Id in Slave controller */ - CfgPtr = XIntc_LookupConfig(Id/32); - - CurrentIER = XIntc_In32(CfgPtr->BaseAddress + XIN_IER_OFFSET); - - /* Convert from integer id to bit mask */ - Mask = XIntc_BitPosMask[(Id%32)]; - - XIntc_Out32(CfgPtr->BaseAddress + XIN_IER_OFFSET, - (CurrentIER & ~Mask)); - } else { - /* - * The Id is used to create the appropriate mask for the - * desired bit position. Id currently limited to 0 - 31 - */ - Mask = XIntc_BitPosMask[Id]; - - /* - * Disable the selected interrupt source by reading the - * interrupt enable register and then modifying only the - * specified interrupt id - */ - CurrentIER = XIntc_In32(InstancePtr->BaseAddress + - XIN_IER_OFFSET); - XIntc_Out32(InstancePtr->BaseAddress + XIN_IER_OFFSET, - (CurrentIER & ~Mask)); - } -} - -/*****************************************************************************/ -/** -* -* Acknowledges the interrupt source provided as the argument Id. When the -* interrupt is acknowledged, it causes the interrupt controller to clear its -* interrupt condition.In Cascade mode, acknowledges corresponding interrupt -* source of Slave controllers depending on the Id. -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* @param Id contains the ID of the interrupt source and should be in the -* range of 0 to XPAR_INTC_MAX_NUM_INTR_INPUTS - 1 with 0 being -* the highest priority interrupt. -* -* @return None. -* -* @note None. -* -****************************************************************************/ -void XIntc_Acknowledge(XIntc * InstancePtr, u8 Id) -{ - u32 Mask; - XIntc_Config *CfgPtr; - - /* - * Assert the arguments - */ - Xil_AssertVoid(InstancePtr != NULL); - Xil_AssertVoid(Id < XPAR_INTC_MAX_NUM_INTR_INPUTS); - Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - if (Id > 31) { - /* Enable user required Id in Slave controller */ - CfgPtr = XIntc_LookupConfig(Id/32); - - /* Convert from integer id to bit mask */ - Mask = XIntc_BitPosMask[(Id%32)]; - - XIntc_Out32(CfgPtr->BaseAddress + XIN_IAR_OFFSET, Mask); - } else { - /* - * The Id is used to create the appropriate mask for the - * desired bit position. - */ - Mask = XIntc_BitPosMask[Id]; - - /* - * Acknowledge the selected interrupt source, no read of the - * acknowledge register is necessary since only the bits set - * in the mask will be affected by the write - */ - XIntc_Out32(InstancePtr->BaseAddress + XIN_IAR_OFFSET, Mask); - } -} - -/*****************************************************************************/ -/** -* -* A stub for the asynchronous callback. The stub is here in case the upper -* layers forget to set the handler. -* -* @param CallBackRef is a pointer to the upper layer callback reference -* -* @return None. -* -* @note None. -* -******************************************************************************/ -static void StubHandler(void *CallBackRef) -{ - /* - * Verify that the inputs are valid - */ - Xil_AssertVoid(CallBackRef != NULL); - - /* - * Indicate another unhandled interrupt for stats - */ - ((XIntc *) CallBackRef)->UnhandledInterrupts++; -} - -/*****************************************************************************/ -/** -* -* Looks up the device configuration based on the unique device ID. A table -* contains the configuration info for each device in the system. -* -* @param DeviceId is the unique identifier for a device. -* -* @return A pointer to the XIntc configuration structure for the specified -* device, or NULL if the device was not found. -* -* @note None. -* -******************************************************************************/ -XIntc_Config *XIntc_LookupConfig(u16 DeviceId) -{ - XIntc_Config *CfgPtr = NULL; - int Index; - - for (Index = 0; Index < XPAR_XINTC_NUM_INSTANCES; Index++) { - if (XIntc_ConfigTable[Index].DeviceId == DeviceId) { - CfgPtr = &XIntc_ConfigTable[Index]; - break; - } - } - - return CfgPtr; -} - -/*****************************************************************************/ -/** -* -* Makes the connection between the Id of the interrupt source and the -* associated handler that is to run when the interrupt is recognized.In Cascade -* mode, connects handler to corresponding Slave controller IVAR register -* depending on the Id and sets all interrupt sources of the Slave controller as -* fast interrupts. -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* @param Id contains the ID of the interrupt source and should be in the -* range of 0 to XPAR_INTC_MAX_NUM_INTR_INPUTS - 1 with 0 being -* the highest priority interrupt. -* @param Handler to the handler for that interrupt. -* -* @return -* - XST_SUCCESS -* -* @note -* Slave controllers in Cascade Mode should have all as Fast -* interrupts or Normal interrupts, mixed interrupts are not -* supported -* -* WARNING: The handler provided as an argument will overwrite any handler -* that was previously connected. -* -****************************************************************************/ -int XIntc_ConnectFastHandler(XIntc *InstancePtr, u8 Id, - XFastInterruptHandler Handler) -{ - u32 Imr; - u32 CurrentIER; - u32 Mask; - XIntc_Config *CfgPtr; - - /* - * Assert the arguments - */ - Xil_AssertNonvoid(InstancePtr != NULL); - Xil_AssertNonvoid(Id < XPAR_INTC_MAX_NUM_INTR_INPUTS); - Xil_AssertNonvoid(Handler != NULL); - Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - Xil_AssertNonvoid(InstancePtr->CfgPtr->FastIntr == TRUE); - - - if (Id > 31) { - /* Enable user required Id in Slave controller */ - CfgPtr = XIntc_LookupConfig(Id/32); - - if (CfgPtr->FastIntr != TRUE) { - /*Fast interrupts of slave controller are not enabled*/ - return XST_FAILURE; - } - - /* Get the Enabled Interrupts */ - CurrentIER = XIntc_In32(CfgPtr->BaseAddress + XIN_IER_OFFSET); - - /* Convert from integer id to bit mask */ - Mask = XIntc_BitPosMask[(Id%32)]; - - /* Disable the Interrupt if it was enabled before calling - * this function - */ - if (CurrentIER & Mask) { - XIntc_Disable(InstancePtr, Id); - } - - XIntc_Out32(CfgPtr->BaseAddress + XIN_IVAR_OFFSET + - ((Id%32) * 4), (u32) Handler); - - /* Slave controllers in Cascade Mode should have all as Fast - * interrupts or Normal interrupts, mixed interrupts are not - * supported - */ - XIntc_Out32(CfgPtr->BaseAddress + XIN_IMR_OFFSET, 0xFFFFFFFF); - - /* Enable the Interrupt if it was enabled before calling this - * function - */ - if (CurrentIER & Mask) { - XIntc_Enable(InstancePtr, Id); - } - } - else { - /* Get the Enabled Interrupts */ - CurrentIER = XIntc_In32(InstancePtr->BaseAddress + - XIN_IER_OFFSET); - /* Convert from integer id to bit mask */ - Mask = XIntc_BitPosMask[Id]; - - /* Disable the Interrupt if it was enabled before calling - * this function - */ - if (CurrentIER & Mask) { - XIntc_Disable(InstancePtr, Id); - } - - XIntc_Out32(InstancePtr->BaseAddress + XIN_IVAR_OFFSET + - (Id * 4), (u32) Handler); - - Imr = XIntc_In32(InstancePtr->BaseAddress + XIN_IMR_OFFSET); - XIntc_Out32(InstancePtr->BaseAddress + XIN_IMR_OFFSET, - Imr | Mask); - - /* Enable the Interrupt if it was enabled before - * calling this function - */ - if (CurrentIER & Mask) { - XIntc_Enable(InstancePtr, Id); - } - - } - - return XST_SUCCESS; -} - - -/*****************************************************************************/ -/** -* -* Sets the normal interrupt mode for the specified interrupt in the Interrupt -* Mode Register. In Cascade mode disconnects handler from corresponding Slave -* controller IVAR register depending on the Id and sets all interrupt sources -* of the Slave controller as normal interrupts. -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* @param Id contains the ID of the interrupt source and should be in the -* range of 0 to XPAR_INTC_MAX_NUM_INTR_INPUTS - 1 with 0 being the -* highest priority interrupt. -* -* @return None. -* -* @note -* Slave controllers in Cascade Mode should have all as Fast -* interrupts or Normal interrupts, mixed interrupts are not -* supported -* -****************************************************************************/ -void XIntc_SetNormalIntrMode(XIntc *InstancePtr, u8 Id) -{ - u32 Imr; - u32 CurrentIER; - u32 Mask; - XIntc_Config *CfgPtr; - - /* - * Assert the arguments - */ - Xil_AssertVoid(InstancePtr != NULL); - Xil_AssertVoid(Id < XPAR_INTC_MAX_NUM_INTR_INPUTS); - Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - Xil_AssertVoid(InstancePtr->CfgPtr->FastIntr == TRUE); - - if (Id > 31) { - /* Enable user required Id in Slave controller */ - CfgPtr = XIntc_LookupConfig(Id/32); - - /* Get the Enabled Interrupts */ - CurrentIER = XIntc_In32(CfgPtr->BaseAddress + XIN_IER_OFFSET); - - /* Convert from integer id to bit mask */ - Mask = XIntc_BitPosMask[(Id%32)]; - - /* Disable the Interrupt if it was enabled before calling - * this function - */ - if (CurrentIER & Mask) { - XIntc_Disable(InstancePtr, Id); - } - - /* Slave controllers in Cascade Mode should have all as Fast - * interrupts or Normal interrupts, mixed interrupts are not - * supported - */ - XIntc_Out32(CfgPtr->BaseAddress + XIN_IMR_OFFSET, 0x0); - -#ifdef XPAR_MICROBLAZE_BASE_VECTORS - for (Id = 0; Id < 32 ; Id++) - { - XIntc_Out32(CfgPtr->BaseAddress + XIN_IVAR_OFFSET - + (Id * 4), XPAR_MICROBLAZE_BASE_VECTORS - + 0x10); - } -#else - for (Id = 0; Id < 32 ; Id++) - { - XIntc_Out32(CfgPtr->BaseAddress + XIN_IVAR_OFFSET - + (Id * 4), 0x10); - } -#endif - - /* Enable the Interrupt if it was enabled before calling this - * function - */ - if (CurrentIER & Mask) { - XIntc_Enable(InstancePtr, Id); - } - - } - else { - - /* Get the Enabled Interrupts */ - CurrentIER = XIntc_In32(InstancePtr->BaseAddress + XIN_IER_OFFSET); - Mask = XIntc_BitPosMask[Id];/* Convert from integer id to bit mask */ - - - /* Disable the Interrupt if it was enabled before - * calling this function - */ - if (CurrentIER & Mask) { - XIntc_Disable(InstancePtr, Id); - } - - /* - * Disable the selected interrupt as Fast Interrupt by reading the - * interrupt mode register and then modifying only the - * specified interrupt id - */ - Imr = XIntc_In32(InstancePtr->BaseAddress + XIN_IMR_OFFSET); - XIntc_Out32(InstancePtr->BaseAddress + XIN_IMR_OFFSET, - Imr & ~Mask); - -#ifdef XPAR_MICROBLAZE_BASE_VECTORS - for (Id = 0; Id < 32 ; Id++) - { - XIntc_Out32(InstancePtr->BaseAddress + XIN_IVAR_OFFSET - + (Id * 4), XPAR_MICROBLAZE_BASE_VECTORS - + 0x10); - } -#else - for (Id = 0; Id < 32 ; Id++) - { - XIntc_Out32(InstancePtr->BaseAddress + XIN_IVAR_OFFSET - + (Id * 4), 0x10); - } -#endif - /* Enable the Interrupt if it was enabled before - * calling this function - */ - if (CurrentIER & Mask) { - XIntc_Enable(InstancePtr, Id); - } - } -} - -/*****************************************************************************/ -/** -* -* Initializes Slave controllers in Cascade mode. The initialization entails: -* - Initial vector table with stub function calls -* - All interrupt sources are disabled for last controller. -* - All interrupt sources are disabled except sources to 31 pin of -* primary and secondary controllers -* - Interrupt outputs are disabled -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* -* @return None -* -* @note None. -* -******************************************************************************/ -static void XIntc_InitializeSlaves(XIntc * InstancePtr) -{ - int Index; - u32 Mask; - XIntc_Config *CfgPtr; - int Id; - - Mask = XIntc_BitPosMask[31]; /* Convert from integer id to bit mask */ - - /* Enable interrupt id with 31 for Master - * interrupt controller - */ - XIntc_Out32(InstancePtr->CfgPtr->BaseAddress + XIN_IER_OFFSET, Mask); - - for (Index = 1; Index <= XPAR_XINTC_NUM_INSTANCES - 1; Index++) { - CfgPtr = XIntc_LookupConfig(Index); - - XIntc_Out32(CfgPtr->BaseAddress + XIN_IAR_OFFSET, - 0xFFFFFFFF); - if (CfgPtr->IntcType != XIN_INTC_LAST) { - - /* Enable interrupt ids with 31 for secondary - * interrupt controllers - */ - XIntc_Out32(CfgPtr->BaseAddress + XIN_IER_OFFSET, - Mask); - } else { - XIntc_Out32(CfgPtr->BaseAddress + XIN_IER_OFFSET, 0x0); - } - - /* Disable Interrupt output */ - XIntc_Out32(CfgPtr->BaseAddress + XIN_MER_OFFSET, 0); - - /* Set all interrupts as normal mode if Fast Interrupts - * are enabled - */ - if(CfgPtr->FastIntr == TRUE) { - XIntc_Out32(CfgPtr->BaseAddress + XIN_IMR_OFFSET, 0); - -#ifdef XPAR_MICROBLAZE_BASE_VECTORS - for (Id = 0; Id < 32 ; Id++) - { - XIntc_Out32(CfgPtr->BaseAddress + - XIN_IVAR_OFFSET + (Id * 4), - XPAR_MICROBLAZE_BASE_VECTORS + 0x10); - } -#else - for (Id = 0; Id < 32 ; Id++) - { - XIntc_Out32(CfgPtr->BaseAddress + - XIN_IVAR_OFFSET + (Id * 4), 0x10); - } -#endif - } - - /* - * Initialize all the data needed to perform interrupt - * processing for each interrupt ID up to the maximum used - */ - for (Id = 0; Id < CfgPtr->NumberofIntrs; Id++) { - - /* - * Initalize the handler to point to a stub to handle an - * interrupt which has not been connected to a handler. - * Only initialize it if the handler is 0 or - * XNullHandler, which means it was not initialized - * statically by the tools/user.Set the callback - * reference to this instance so that unhandled - * interrupts can be tracked. - */ - if ((CfgPtr->HandlerTable[Id].Handler == 0) || - (CfgPtr->HandlerTable[Id].Handler == - XNullHandler)) { - CfgPtr->HandlerTable[Id].Handler = StubHandler; - } - CfgPtr->HandlerTable[Id].CallBackRef = InstancePtr; - } - } -} diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc.h deleted file mode 100644 index ff6797d5c..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc.h +++ /dev/null @@ -1,363 +0,0 @@ -/****************************************************************************** -* -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xintc.h -* -* The Xilinx interrupt controller driver component. This component supports the -* Xilinx interrupt controller. -* -* The interrupt controller driver uses the idea of priority for the various -* handlers. Priority is an integer within the range of 0 and 31 inclusive with -* 0 being the highest priority interrupt source. -* -* The Xilinx interrupt controller supports the following features: -* -* - specific individual interrupt enabling/disabling -* - specific individual interrupt acknowledging -* - attaching specific callback function to handle interrupt source -* - master enable/disable -* - single callback per interrupt or all pending interrupts handled for -* each interrupt of the processor -* -* The acknowledgement of the interrupt within the interrupt controller is -* selectable, either prior to the device's handler being called or after -* the handler is called. This is necessary to support interrupt signal inputs -* which are either edge or level signals. Edge driven interrupt signals -* require that the interrupt is acknowledged prior to the interrupt being -* serviced in order to prevent the loss of interrupts which are occurring -* extremely close together. A level driven interrupt input signal requires -* the interrupt to acknowledged after servicing the interrupt to ensure that -* the interrupt only generates a single interrupt condition. -* -* Details about connecting the interrupt handler of the driver are contained -* in the source file specific to interrupt processing, xintc_intr.c. -* -* This driver is intended to be RTOS and processor independent. It works with -* physical addresses only. Any needs for dynamic memory management, threads -* or thread mutual exclusion, virtual memory, or cache control must be -* satisfied by the layer above this driver. -* -* Interrupt Vector Tables -* -* The interrupt vector table for each interrupt controller device is declared -* statically in xintc_g.c within the configuration data for each instance. -* The device ID of the interrupt controller device is used by the driver as a -* direct index into the configuration data table - to retrieve the vector table -* for an instance of the interrupt controller. The user should populate the -* vector table with handlers and callbacks at run-time using the XIntc_Connect() -* and XIntc_Disconnect() functions. -* -* Each vector table entry corresponds to a device that can generate an -* interrupt. Each entry contains an interrupt handler function and an argument -* to be passed to the handler when an interrupt occurs. The tools default this -* argument to the base address of the interrupting device. Note that the -* device driver interrupt handlers given in this file do not take a base -* address as an argument, but instead take a pointer to the driver instance. -* This means that although the table is created statically, the user must still -* use XIntc_Connect() when the interrupt handler takes an argument other than -* the base address. This is only to say that the existence of the static vector -* tables should not mislead the user into thinking they no longer need to -* register/connect interrupt handlers with this driver. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -------------------------------------------------------
-* 1.00a ecm  08/16/01 First release
-* 1.00a rpm  01/09/02 Removed the AckLocation argument from XIntc_Connect().
-*                     This information is now internal in xintc_g.c.
-* 1.00b jhl  02/13/02 Repartitioned the driver for smaller files
-* 1.00b jhl  04/24/02 Made LookupConfig function global and relocated config
-*                     data type
-* 1.00c rpm  10/17/03 New release. Support the static vector table created
-*                     in the xintc_g.c configuration table. Moved vector
-*                     table and options out of instance structure and into
-*                     the configuration table.
-* 1.10c mta  03/21/07 Updated to new coding style
-* 1.11a sv   11/21/07 Updated driver to support access through a DCR bridge
-* 2.00a ktn  10/20/09 Updated to use HAL Processor APIs and _m is removed from
-*		      all the macro names/definitions.
-* 2.01a sdm  04/27/10 Updated the tcl so that the defintions are generated in
-*		      the xparameters.h to know whether the optional registers
-*		      SIE, CIE and IVR are enabled in the HW - Refer CR 555392.
-*		      This driver doesnot make use of these definitions and does
-*		      not use the optional registers.
-* 2.03a hvm  05/24/11 Updated the tcl to generate vector Ids for external
-*		      interrupts. CR565336
-* 2.04a bss  01/13/12 Added XIntc_ConnectFastHandler API for Fast Interrupt
-*		      and XIntc_SetNormalIntrMode for setting to normal
-*		      interrupt mode.
-* 2.04a asa  03/19/12 Changed the XIntc_Config struct. The order of entries
-*		      declared in the structure now matches with the
-*		      XIntc_ConfigTable generated by the driver tcl.
-* 2.05a bss  08/16/12 Updated to support relocatable vectors in Microblaze,
-*		      added IntVectorAddr to XIntc_Config for this.
-*		      Added XIntc_RegisterFastHandler API to register fast
-*		      interrupt handlers using base address.
-* 2.06a bss  01/28/13 To support Cascade mode:
-* 		      Added XIN_INTC_NOCASCADE,XIN_INTC_PRIMARY,
-*		      XIN_INTC_SECONDARY,XIN_INTC_LAST and
-*		      XIN_CONTROLLER_MAX_INTRS  macros
-*		      Added NumberofIntrs and IntcType fields in XIntc_Config
-*		      structure.
-*		      Modified XIntc_Initialize,XIntc_Start,XIntc_Connect
-*		      XIntc_Disconnect,XIntc_Enable,XIntc_Disable,
-*		      XIntc_Acknowledge,XIntc_ConnectFastHandler and
-*		      XIntc_SetNormalIntrMode APIs.Added XIntc_InitializeSlaves
-*		      API in xintc.c
-*  		      Modified XIntc_DeviceInterruptHandler,
-*  		      XIntc_SetIntrSvcOption,XIntc_RegisterHandler and
-*		      XIntc_RegisterFastHandler APIs.Added XIntc_CascadeHandler
-*		      API in xintc_l.c.
-*		      Modified XIntc_SetOptions API in xintc_options.c.
-*		      Modified XIntc_SimulateIntr API in xintc_selftest.c.
-*		      Modified driver tcl:
-*			to check for Cascade mode and generate XPAR_INTC_TYPE
-*			for each controller.
-*			Generate XPAR_INTC_MAX_NUM_INTR_INPUTS by adding all
-*			interrupt sources of all Controllers in Cascade mode.
-* 2.07a bss  10/18/13 To support Nested interrupts:
-*		      Modified XIntc_DeviceInterruptHandler API.
-*		      Added XIN_ILR_OFFSET macro in xintc_l.h.
-*		      Modified driver tcl to generate HAS_ILR parameter in
-*		      xparameters.h
-* 3.0   bss  01/28/13 Modified xintc.c to initialize IVAR register with
-*		      XPAR_MICROBLAZE_BASE_VECTORS + 0x10 to fix
-*		      CR#765931.
-*		      Modified driver tcl to generate XPAR_AXI_INTC_0_TYPE
-*		      correctly(CR#764865).
-*
-* @note
-*		For Cascade mode, Interrupt IDs are generated in xparameters.h
-*		as shown below:
-*
-*	    Master/Primary INTC
-*		 ______
-*		|      |-0      Secondary INTC
-*		|      |-.         ______
-*		|      |-.        |      |-32        Last INTC
-*		|      |-.        |      |-.          ______
-*		|______|<-31------|      |-.         |      |-64
-*			          |      |-.         |      |-.
-*			          |______|<-63-------|      |-.
-*                                                    |      |-.
-*                                                    |______|-95
-*
-*		All driver functions has to be called using DeviceId/
-*		InstancePtr/BaseAddress of Primary/Master Controller and
-*		Interrupts IDs generated in xparameters.h only.
-*		Driver functions takes care of Slave Controllers based on
-*		Interrupt ID passed. User must not use Interrupt source/ID
-*		31 of Primary and Secondary controllers to call driver
-*		functions.
-*
-*		For nested interrupts, XIntc_DeviceInterruptHandler saves
-*		microblaze r14 register on entry and restores on exit. This is
-*		required since compiler does not support nesting. It enables
-*		Microblaze interrupts after blocking further interrupts from
-*		the current interrupt number and interrupts below current
-*		interrupt proirity by writing to Interrupt Level Register of
-*		INTC on entry. On exit, it disables microblaze interrupts and
-*		restores ILR register default value(0xFFFFFFFF)back. It is
-*		recommended to increase STACK_SIZE in linker script for nested
-*		interrupts.
-* 3.0     adk    12/10/13  Updated as per the New Tcl API's
-* 3.0 	  adk 	 17/02/14  Fixed the CR:771287 Changes are made in the intc
-* 		           driver tcl.
-* 3.1     adk    8/4/14    Fixed the CR:783248 Changes are made in
-*			   the test-app tcl
-* 3.2     bss    4/8/14    Fixed driver tcl to handle external interrupt pins
-*			   correctly (CR#799609).
-*
-* 
-* -******************************************************************************/ - -#ifndef XINTC_H /* prevent circular inclusions */ -#define XINTC_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - - -/***************************** Include Files *********************************/ - -#include "xil_types.h" -#include "xil_assert.h" -#include "xparameters.h" -#include "xstatus.h" -#include "xintc_l.h" - -/************************** Constant Definitions *****************************/ - -/** - * @name Configuration options - * These options are used in XIntc_SetOptions() to configure the device. - * @{ - */ -/** - *
- * XIN_SVC_SGL_ISR_OPTION	Service the highest priority pending interrupt
- *				and then return.
- * XIN_SVC_ALL_ISRS_OPTION	Service all of the pending interrupts and then
- *				return.
- * 
- */ -#define XIN_SVC_SGL_ISR_OPTION 1UL -#define XIN_SVC_ALL_ISRS_OPTION 2UL -/*@}*/ - -/** - * @name Start modes - * One of these values is passed to XIntc_Start() to start the device. - * @{ - */ -/** Simulation only mode, no hardware interrupts recognized */ -#define XIN_SIMULATION_MODE 0 -/** Real mode, no simulation allowed, hardware interrupts recognized */ -#define XIN_REAL_MODE 1 -/*@}*/ - -/** - * @name Masks to specify Interrupt Controller Mode - * @{ - */ -#define XIN_INTC_NOCASCADE 0 /* Normal - No Cascade Mode */ -#define XIN_INTC_PRIMARY 1 /* Master/Primary controller */ -#define XIN_INTC_SECONDARY 2 /* Secondary Slave Controllers */ -#define XIN_INTC_LAST 3 /* Last Slave Controller */ - -/*@}*/ - -/** - * @name Mask to specify maximum number of interrupt sources per controller - * @{ - */ -#define XIN_CONTROLLER_MAX_INTRS 32 /* Each Controller has 32 - interrupt pins */ -/*@}*/ - -/**************************** Type Definitions *******************************/ - -/** - * This typedef contains configuration information for the device. - */ -typedef struct { - u16 DeviceId; /**< Unique ID of device */ - u32 BaseAddress; /**< Register base address */ - u32 AckBeforeService; /**< Ack location per interrupt */ - int FastIntr; /**< Fast Interrupt enabled */ - u32 IntVectorAddr; /**< Interrupt Vector Address */ - int NumberofIntrs; /**< Number of Interrupt sources */ - u32 Options; /**< Device options */ - int IntcType; /**< Intc type 0 - No Cascade Mode - 1 - primary instance - 2 - secondary instance - 3 - last instance */ - -/** Static vector table of interrupt handlers */ -#if XPAR_INTC_0_INTC_TYPE != XIN_INTC_NOCASCADE - XIntc_VectorTableEntry HandlerTable[XIN_CONTROLLER_MAX_INTRS]; -#else - XIntc_VectorTableEntry HandlerTable[XPAR_INTC_MAX_NUM_INTR_INPUTS]; -#endif - -} XIntc_Config; - -/** - * The XIntc driver instance data. The user is required to allocate a - * variable of this type for every intc device in the system. A pointer - * to a variable of this type is then passed to the driver API functions. - */ -typedef struct { - u32 BaseAddress; /**< Base address of registers */ - u32 IsReady; /**< Device is initialized and ready */ - u32 IsStarted; /**< Device has been started */ - u32 UnhandledInterrupts; /**< Intc Statistics */ - XIntc_Config *CfgPtr; /**< Pointer to instance config entry */ - -} XIntc; - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/* - * Required functions in xintc.c - */ -int XIntc_Initialize(XIntc * InstancePtr, u16 DeviceId); - -int XIntc_Start(XIntc * InstancePtr, u8 Mode); -void XIntc_Stop(XIntc * InstancePtr); - -int XIntc_Connect(XIntc * InstancePtr, u8 Id, - XInterruptHandler Handler, void *CallBackRef); -void XIntc_Disconnect(XIntc * InstancePtr, u8 Id); - -void XIntc_Enable(XIntc * InstancePtr, u8 Id); -void XIntc_Disable(XIntc * InstancePtr, u8 Id); - -void XIntc_Acknowledge(XIntc * InstancePtr, u8 Id); - -XIntc_Config *XIntc_LookupConfig(u16 DeviceId); - -int XIntc_ConnectFastHandler(XIntc *InstancePtr, u8 Id, - XFastInterruptHandler Handler); -void XIntc_SetNormalIntrMode(XIntc *InstancePtr, u8 Id); - -/* - * Interrupt functions in xintr_intr.c - */ -void XIntc_VoidInterruptHandler(void); -void XIntc_InterruptHandler(XIntc * InstancePtr); - -/* - * Options functions in xintc_options.c - */ -int XIntc_SetOptions(XIntc * InstancePtr, u32 Options); -u32 XIntc_GetOptions(XIntc * InstancePtr); - -/* - * Self-test functions in xintc_selftest.c - */ -int XIntc_SelfTest(XIntc * InstancePtr); -int XIntc_SimulateIntr(XIntc * InstancePtr, u8 Id); - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_g.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_g.c deleted file mode 100644 index 46e1132d9..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_g.c +++ /dev/null @@ -1,78 +0,0 @@ - -/******************************************************************* -* -* CAUTION: This file is automatically generated by HSI. -* Version: -* DO NOT EDIT. -* -* Copyright (C) 2010-2015 Xilinx, Inc. All Rights Reserved.* -*Permission is hereby granted, free of charge, to any person obtaining a copy -*of this software and associated documentation files (the Software), to deal -*in the Software without restriction, including without limitation the rights -*to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -*copies of the Software, and to permit persons to whom the Software is -*furnished to do so, subject to the following conditions: -* -*The above copyright notice and this permission notice shall be included in -*all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -*(a) running on a Xilinx device, or -*(b) that interact with a Xilinx device through a bus or interconnect. -* -*THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -*IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -*XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -*WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT -*OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -* -*Except as contained in this notice, the name of the Xilinx shall not be used -*in advertising or otherwise to promote the sale, use or other dealings in -*this Software without prior written authorization from Xilinx. -* - -* -* Description: Driver configuration -* -*******************************************************************/ - -#include "xparameters.h" -#include "xintc.h" - - -extern void XNullHandler (void *); - -/* -* The configuration table for devices -*/ - -XIntc_Config XIntc_ConfigTable[] = -{ - { - XPAR_AXI_INTC_0_DEVICE_ID, - XPAR_AXI_INTC_0_BASEADDR, - XPAR_AXI_INTC_0_KIND_OF_INTR, - XPAR_AXI_INTC_0_HAS_FAST, - XPAR_AXI_INTC_0_IVAR_RESET_VALUE, - XPAR_AXI_INTC_0_NUM_INTR_INPUTS, - XIN_SVC_SGL_ISR_OPTION, - XPAR_AXI_INTC_0_TYPE, - { - { - XNullHandler, - (void *) XNULL - }, - { - XNullHandler, - (void *) XNULL - }, - { - XNullHandler, - (void *) XNULL - } - } - - } -}; - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_intr.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_intr.c deleted file mode 100644 index 3e74c0bba..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_intr.c +++ /dev/null @@ -1,173 +0,0 @@ -/****************************************************************************** -* -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xintc_intr.c -* -* This file contains the interrupt processing for the XIntc component which -* is the driver for the Xilinx Interrupt Controller. The interrupt -* processing is partitioned seperately such that users are not required to -* use the provided interrupt processing. This file requires other files of -* the driver to be linked in also. -* -* Two different interrupt handlers are provided for this driver such that the -* user must select the appropriate handler for the application. The first -* interrupt handler, XIntc_VoidInterruptHandler, is provided for systems -* which use only a single interrupt controller or for systems that cannot -* otherwise provide an argument to the XIntc interrupt handler (e.g., the RTOS -* interrupt vector handler may not provide such a facility). The constant -* XPAR_INTC_SINGLE_DEVICE_ID must be defined for this handler to be included in -* the driver. The second interrupt handler, XIntc_InterruptHandler, uses an -* input argument which is an instance pointer to an interrupt controller driver -* such that multiple interrupt controllers can be supported. This handler -* requires the calling function to pass it the appropriate argument, so another -* level of indirection may be required. -* -* Note that both of these handlers are now only provided for backward -* compatibility. The handler defined in xintc_l.c is the recommended handler. -* -* The interrupt processing may be used by connecting one of the interrupt -* handlers to the interrupt system. These handlers do not save and restore -* the processor context but only handle the processing of the Interrupt -* Controller. The two handlers are provided as working examples. The user is -* encouraged to supply their own interrupt handler when performance tuning is -* deemed necessary. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- ---------------------------------------------------------
-* 1.00b jhl  02/13/02 First release
-* 1.00c rpm  10/17/03 New release. Support the static vector table created
-*                     in the xintc_g.c configuration table. Collapse handlers
-*                     to use the XIntc_DeviceInterruptHandler() in xintc_l.c.
-* 1.00c rpm  04/09/04 Added conditional compilation around the old handler
-*                     XIntc_VoidInterruptHandler(). This handler will only be
-*                     include/compiled if XPAR_INTC_SINGLE_DEVICE_ID is defined.
-* 1.10c mta  03/21/07 Updated to new coding style
-* 2.00a ktn  10/20/09 Updated to use HAL Processor APIs.
-*
-* 
-* -* @internal -* -* This driver assumes that the context of the processor has been saved prior to -* the calling of the Interrupt Controller interrupt handler and then restored -* after the handler returns. This requires either the running RTOS to save the -* state of the machine or that a wrapper be used as the destination of the -* interrupt vector to save the state of the processor and restore the state -* after the interrupt handler returns. -* -******************************************************************************/ - -/***************************** Include Files *********************************/ - -#include "xil_types.h" -#include "xil_assert.h" -#include "xparameters.h" -#include "xintc.h" - -/************************** Constant Definitions *****************************/ - - - -/**************************** Type Definitions *******************************/ - - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - - -/************************** Variable Definitions *****************************/ - - -/*****************************************************************************/ -/** -* -* Interrupt handler for the driver used when there can be no argument passed -* to the handler. This function is provided mostly for backward compatibility. -* The user should use XIntc_DeviceInterruptHandler(), defined in xintc_l.c, -* if possible. -* -* The user must connect this function to the interrupt system such that it is -* called whenever the devices which are connected to it cause an interrupt. -* -* @return None. -* -* @note -* -* The constant XPAR_INTC_SINGLE_DEVICE_ID must be defined for this handler -* to be included in the driver compilation. -* -******************************************************************************/ -#ifdef XPAR_INTC_SINGLE_DEVICE_ID -void XIntc_VoidInterruptHandler(void) -{ - /* Use the single instance to call the main interrupt handler */ - XIntc_DeviceInterruptHandler((void *) XPAR_INTC_SINGLE_DEVICE_ID); -} -#endif - -/*****************************************************************************/ -/** -* -* The interrupt handler for the driver. This function is provided mostly for -* backward compatibility. The user should use XIntc_DeviceInterruptHandler(), -* defined in xintc_l.c when possible and pass the device ID of the interrupt -* controller device as its argument. -* -* The user must connect this function to the interrupt system such that it is -* called whenever the devices which are connected to it cause an interrupt. -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* -* @return None. -* -* @note None. -* -******************************************************************************/ -void XIntc_InterruptHandler(XIntc * InstancePtr) -{ - /* Assert that the pointer to the instance is valid - */ - Xil_AssertVoid(InstancePtr != NULL); - - /* Use the instance's device ID to call the main interrupt handler. - * (the casts are to avoid a compiler warning) - */ - XIntc_DeviceInterruptHandler((void *) - ((u32) (InstancePtr->CfgPtr->DeviceId))); -} diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_l.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_l.c deleted file mode 100644 index db3b3e258..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_l.c +++ /dev/null @@ -1,662 +0,0 @@ -/****************************************************************************** -* -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xintc_l.c -* -* This file contains low-level driver functions that can be used to access the -* device. The user should refer to the hardware device specification for more -* details of the device operation. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -------------------------------------------------------
-* 1.00b jhl  04/24/02 First release
-* 1.00c rpm  10/17/03 New release. Support the static vector table created
-*                     in the xintc_g.c configuration table.
-* 1.00c rpm  04/09/04 Added conditional compilation around the old handler
-*                     XIntc_LowLevelInterruptHandler(). This handler will only
-*                     be include/compiled if XPAR_INTC_SINGLE_DEVICE_ID is
-*                     defined.
-* 1.10c mta  03/21/07 Updated to new coding style
-* 1.10c ecm  07/09/07 Read the ISR after the Acknowledge in the interrupt
-*		      handler to support architectures with posted write bus
-*		      access issues.
-* 2.00a ktn  10/20/09 Updated to use HAL Processor APIs and  _m is removed
-*		      from all the macro definitions.
-* 2.04a bss  01/13/12 Removed the unused Register variable for warnings.
-* 2.05a bss  08/18/12 Added XIntc_RegisterFastHandler API to register fast
-*		      interrupt handlers using base address.
-* 2.06a bss  01/28/13 To support Cascade mode:
-*		      Modified XIntc_DeviceInterruptHandler,
-*		      XIntc_SetIntrSvcOption,XIntc_RegisterHandler and
-*		      XIntc_RegisterFastHandler APIs.
-*		      Added XIntc_CascadeHandler API.
-* 2.07a bss  10/18/13 Modified XIntc_DeviceInterruptHandler to support
-*		      nested interrupts.
-*
-* 
-* -******************************************************************************/ - - -/***************************** Include Files *********************************/ - -#include "xparameters.h" -#include "xil_types.h" -#include "xil_assert.h" -#include "xintc.h" -#include "xintc_i.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - -static XIntc_Config *LookupConfigByBaseAddress(u32 BaseAddress); - -#if XPAR_INTC_0_INTC_TYPE != XIN_INTC_NOCASCADE -static void XIntc_CascadeHandler(void *DeviceId); -#endif - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ -/** -* -* This is the interrupt handler for the driver interface provided in this file -* when there can be no argument passed to the handler. In this case, we just -* use the globally defined device ID for the interrupt controller. This function -* is provided mostly for backward compatibility. The user should use -* XIntc_DeviceInterruptHandler() if possible. -* -* This function does not support multiple interrupt controller instances to be -* handled. -* -* The user must connect this function to the interrupt system such that it is -* called whenever the devices which are connected to it cause an interrupt. -* -* @return None. -* -* @note -* -* The constant XPAR_INTC_SINGLE_DEVICE_ID must be defined for this handler -* to be included in the driver compilation. -* -******************************************************************************/ -#ifdef XPAR_INTC_SINGLE_DEVICE_ID -void XIntc_LowLevelInterruptHandler(void) -{ - /* - * A level of indirection here because the interrupt handler used with - * the driver interface given in this file needs to remain void - no - * arguments. So we need the globally defined device ID of THE - * interrupt controller. - */ - XIntc_DeviceInterruptHandler((void *) XPAR_INTC_SINGLE_DEVICE_ID); -} -#endif - -/*****************************************************************************/ -/** -* -* This function is the primary interrupt handler for the driver. It must be -* connected to the interrupt source such that is called when an interrupt of -* the interrupt controller is active. It will resolve which interrupts are -* active and enabled and call the appropriate interrupt handler. It uses -* the AckBeforeService flag in the configuration data to determine when to -* acknowledge the interrupt. Highest priority interrupts are serviced first. -* This function assumes that an interrupt vector table has been previously -* initialized.It does not verify that entries in the table are valid before -* calling an interrupt handler. In Cascade mode this function calls -* XIntc_CascadeHandler to handle interrupts of Master and Slave controllers. -* This functions also handles interrupts nesting by saving and restoring link -* register of Microblaze and Interrupt Level register of interrupt controller -* properly. - -* @param DeviceId is the zero-based device ID defined in xparameters.h -* of the interrupting interrupt controller. It is used as a direct -* index into the configuration data, which contains the vector -* table for the interrupt controller. Note that even though the -* argument is a void pointer, the value is not a pointer but the -* actual device ID. The void pointer type is necessary to meet -* the XInterruptHandler typedef for interrupt handlers. -* -* @return None. -* -* @note For nested interrupts, this function saves microblaze r14 -* register on entry and restores on exit. This is required since -* compiler does not support nesting. This function enables -* Microblaze interrupts after blocking further interrupts -* from the current interrupt number and interrupts below current -* interrupt proirity by writing to Interrupt Level Register of -* INTC on entry. On exit, it disables microblaze interrupts and -* restores ILR register default value(0xFFFFFFFF)back. It is -* recommended to increase STACK_SIZE in linker script for nested -* interrupts. -* -******************************************************************************/ -void XIntc_DeviceInterruptHandler(void *DeviceId) -{ - u32 IntrStatus; - u32 IntrMask = 1; - int IntrNumber; - XIntc_Config *CfgPtr; - u32 Imr; - - /* Get the configuration data using the device ID */ - CfgPtr = &XIntc_ConfigTable[(u32)DeviceId]; - -#if XPAR_INTC_0_INTC_TYPE != XIN_INTC_NOCASCADE - if (CfgPtr->IntcType != XIN_INTC_NOCASCADE) { - XIntc_CascadeHandler(DeviceId); - } - else -#endif - { /* This extra brace is required for compilation in Cascade Mode */ - -#if XPAR_XINTC_HAS_ILR == TRUE -#ifdef __MICROBLAZE__ - volatile u32 R14_register; - /* Save r14 register */ - R14_register = mfgpr(r14); -#endif - volatile u32 ILR_reg; - /* Save ILR register */ - ILR_reg = Xil_In32(CfgPtr->BaseAddress + XIN_ILR_OFFSET); -#endif - /* Get the interrupts that are waiting to be serviced */ - IntrStatus = XIntc_GetIntrStatus(CfgPtr->BaseAddress); - - /* Mask the Fast Interrupts */ - if (CfgPtr->FastIntr == TRUE) { - Imr = XIntc_In32(CfgPtr->BaseAddress + XIN_IMR_OFFSET); - IntrStatus &= ~Imr; - } - - /* Service each interrupt that is active and enabled by - * checking each bit in the register from LSB to MSB which - * corresponds to an interrupt input signal - */ - for (IntrNumber = 0; IntrNumber < CfgPtr->NumberofIntrs; - IntrNumber++) { - if (IntrStatus & 1) { - XIntc_VectorTableEntry *TablePtr; -#if XPAR_XINTC_HAS_ILR == TRUE - /* Write to ILR the current interrupt - * number - */ - Xil_Out32(CfgPtr->BaseAddress + - XIN_ILR_OFFSET, IntrNumber); - - /* Read back ILR to ensure the value - * has been updated and it is safe to - * enable interrupts - */ - - Xil_In32(CfgPtr->BaseAddress + - XIN_ILR_OFFSET); - - /* Enable interrupts */ - Xil_ExceptionEnable(); -#endif - /* If the interrupt has been setup to - * acknowledge it before servicing the - * interrupt, then ack it */ - if (CfgPtr->AckBeforeService & IntrMask) { - XIntc_AckIntr(CfgPtr->BaseAddress, - IntrMask); - } - - /* The interrupt is active and enabled, call - * the interrupt handler that was setup with - * the specified parameter - */ - TablePtr = &(CfgPtr->HandlerTable[IntrNumber]); - TablePtr->Handler(TablePtr->CallBackRef); - - /* If the interrupt has been setup to - * acknowledge it after it has been serviced - * then ack it - */ - if ((CfgPtr->AckBeforeService & - IntrMask) == 0) { - XIntc_AckIntr(CfgPtr->BaseAddress, - IntrMask); - } - -#if XPAR_XINTC_HAS_ILR == TRUE - /* Disable interrupts */ - Xil_ExceptionDisable(); - /* Restore ILR */ - Xil_Out32(CfgPtr->BaseAddress + XIN_ILR_OFFSET, - ILR_reg); -#endif - /* - * Read the ISR again to handle architectures - * with posted write bus access issues. - */ - XIntc_GetIntrStatus(CfgPtr->BaseAddress); - - /* - * If only the highest priority interrupt is to - * be serviced, exit loop and return after - * servicing - * the interrupt - */ - if (CfgPtr->Options == XIN_SVC_SGL_ISR_OPTION) { - -#if XPAR_XINTC_HAS_ILR == TRUE -#ifdef __MICROBLAZE__ - /* Restore r14 */ - mtgpr(r14, R14_register); -#endif -#endif - return; - } - } - - /* Move to the next interrupt to check */ - IntrMask <<= 1; - IntrStatus >>= 1; - - /* If there are no other bits set indicating that all - * interrupts have been serviced, then exit the loop - */ - if (IntrStatus == 0) { - break; - } - } -#if XPAR_XINTC_HAS_ILR == TRUE -#ifdef __MICROBLAZE__ - /* Restore r14 */ - mtgpr(r14, R14_register); -#endif -#endif - } -} - -/*****************************************************************************/ -/** -* -* Set the interrupt service option, which can configure the driver so that it -* services only a single interrupt at a time when an interrupt occurs, or -* services all pending interrupts when an interrupt occurs. The default -* behavior when using the driver interface given in xintc.h file is to service -* only a single interrupt, whereas the default behavior when using the driver -* interface given in this file is to service all outstanding interrupts when an -* interrupt occurs. In Cascade mode same Option is set to Slave controllers. -* -* @param BaseAddress is the unique identifier for a device. -* @param Option is XIN_SVC_SGL_ISR_OPTION if you want only a single -* interrupt serviced when an interrupt occurs, or -* XIN_SVC_ALL_ISRS_OPTION if you want all pending interrupts -* serviced when an interrupt occurs. -* -* @return None. -* -* @note -* -* Note that this function has no effect if the input base address is invalid. -* -******************************************************************************/ -void XIntc_SetIntrSvcOption(u32 BaseAddress, int Option) -{ - XIntc_Config *CfgPtr; - - CfgPtr = LookupConfigByBaseAddress(BaseAddress); - if (CfgPtr != NULL) { - CfgPtr->Options = Option; - /* If Cascade mode set the option for all Slaves */ - if (CfgPtr->IntcType != XIN_INTC_NOCASCADE) { - int Index; - for (Index = 1; Index <= XPAR_XINTC_NUM_INSTANCES - 1; - Index++) { - CfgPtr = XIntc_LookupConfig(Index); - CfgPtr->Options = Option; - } - } - } -} - -/*****************************************************************************/ -/** -* -* Register a handler function for a specific interrupt ID. The vector table -* of the interrupt controller is updated, overwriting any previous handler. -* The handler function will be called when an interrupt occurs for the given -* interrupt ID. -* -* This function can also be used to remove a handler from the vector table -* by passing in the XIntc_DefaultHandler() as the handler and NULL as the -* callback reference. -* In Cascade mode Interrupt Id is used to set Handler for corresponding Slave -* Controller -* -* @param BaseAddress is the base address of the interrupt controller -* whose vector table will be modified. -* @param InterruptId is the interrupt ID to be associated with the input -* handler. -* @param Handler is the function pointer that will be added to -* the vector table for the given interrupt ID. -* @param CallBackRef is the argument that will be passed to the new -* handler function when it is called. This is user-specific. -* -* @return None. -* -* @note -* -* Note that this function has no effect if the input base address is invalid. -* -******************************************************************************/ -void XIntc_RegisterHandler(u32 BaseAddress, int InterruptId, - XInterruptHandler Handler, void *CallBackRef) -{ - XIntc_Config *CfgPtr; - - CfgPtr = LookupConfigByBaseAddress(BaseAddress); - - if (CfgPtr != NULL) { - - if (InterruptId > 31) { - CfgPtr = XIntc_LookupConfig(InterruptId/32); - CfgPtr->HandlerTable[InterruptId%32].Handler = Handler; - CfgPtr->HandlerTable[InterruptId%32].CallBackRef = - CallBackRef; - } - else { - CfgPtr->HandlerTable[InterruptId].Handler = Handler; - CfgPtr->HandlerTable[InterruptId].CallBackRef = - CallBackRef; - } - } -} - - -/*****************************************************************************/ -/** -* -* Looks up the device configuration based on the base address of the device. -* A table contains the configuration info for each device in the system. -* -* @param BaseAddress is the unique identifier for a device. -* -* @return -* -* A pointer to the configuration structure for the specified device, or -* NULL if the device was not found. -* -* @note None. -* -******************************************************************************/ -static XIntc_Config *LookupConfigByBaseAddress(u32 BaseAddress) -{ - XIntc_Config *CfgPtr = NULL; - int Index; - - for (Index = 0; Index < XPAR_XINTC_NUM_INSTANCES; Index++) { - if (XIntc_ConfigTable[Index].BaseAddress == BaseAddress) { - CfgPtr = &XIntc_ConfigTable[Index]; - break; - } - } - - return CfgPtr; -} - -/*****************************************************************************/ -/** -* -* Register a fast handler function for a specific interrupt ID. The handler -* function will be called when an interrupt occurs for the given interrupt ID. -* In Cascade mode Interrupt Id is used to set Handler for corresponding Slave -* Controller -* -* @param BaseAddress is the base address of the interrupt controller -* whose vector table will be modified. -* @param InterruptId is the interrupt ID to be associated with the input -* handler. -* @param FastHandler is the function pointer that will be called when -* interrupt occurs -* -* @return None. -* -* @note -* -* Note that this function has no effect if the input base address is invalid. -* -******************************************************************************/ -void XIntc_RegisterFastHandler(u32 BaseAddress, u8 Id, - XFastInterruptHandler FastHandler) -{ - u32 CurrentIER; - u32 Mask; - u32 Imr; - XIntc_Config *CfgPtr; - - - if (Id > 31) { - /* Enable user required Id in Slave controller */ - CfgPtr = XIntc_LookupConfig(Id/32); - - /* Get the Enabled Interrupts */ - CurrentIER = XIntc_In32(CfgPtr->BaseAddress + XIN_IER_OFFSET); - - /* Convert from integer id to bit mask */ - Mask = XIntc_BitPosMask[(Id%32)]; - - /* Disable the Interrupt if it was enabled before calling - * this function - */ - if (CurrentIER & Mask) { - XIntc_Out32(CfgPtr->BaseAddress + XIN_IER_OFFSET, - (CurrentIER & ~Mask)); - } - - XIntc_Out32(CfgPtr->BaseAddress + XIN_IVAR_OFFSET + - ((Id%32) * 4), (u32) FastHandler); - - /* Slave controllers in Cascade Mode should have all as Fast - * interrupts or Normal interrupts, mixed interrupts are not - * supported - */ - XIntc_Out32(CfgPtr->BaseAddress + XIN_IMR_OFFSET, 0xFFFFFFFF); - - /* Enable the Interrupt if it was enabled before calling this - * function - */ - if (CurrentIER & Mask) { - XIntc_Out32(CfgPtr->BaseAddress + XIN_IER_OFFSET, - (CurrentIER | Mask)); - } - } - else { - - CurrentIER = XIntc_In32(BaseAddress + XIN_IER_OFFSET); - - /* Convert from integer id to bit mask */ - Mask = XIntc_BitPosMask[Id]; - - if (CurrentIER & Mask) { - /* Disable Interrupt if it was enabled */ - CurrentIER = XIntc_In32(BaseAddress + XIN_IER_OFFSET); - XIntc_Out32(BaseAddress + XIN_IER_OFFSET, - (CurrentIER & ~Mask)); - } - - XIntc_Out32(BaseAddress + XIN_IVAR_OFFSET + (Id * 4), - (u32) FastHandler); - - Imr = XIntc_In32(BaseAddress + XIN_IMR_OFFSET); - XIntc_Out32(BaseAddress + XIN_IMR_OFFSET, Imr | Mask); - - - /* Enable Interrupt if it was enabled before calling - * this function - */ - if (CurrentIER & Mask) { - CurrentIER = XIntc_In32(BaseAddress + XIN_IER_OFFSET); - XIntc_Out32(BaseAddress + XIN_IER_OFFSET, - (CurrentIER | Mask)); - } - } -} - -#if XPAR_INTC_0_INTC_TYPE != XIN_INTC_NOCASCADE -/*****************************************************************************/ -/** -* -* This function is called by primary interrupt handler for the driver to handle -* all Controllers in Cascade mode.It will resolve which interrupts are active -* and enabled and call the appropriate interrupt handler. It uses the -* AckBeforeService flag in the configuration data to determine when to -* acknowledge the interrupt. Highest priority interrupts are serviced first. -* This function assumes that an interrupt vector table has been previously -* initialized. It does not verify that entries in the table are valid before -* calling an interrupt handler.This function calls itself recursively to handle -* all interrupt controllers. -* -* @param DeviceId is the zero-based device ID defined in xparameters.h -* of the interrupting interrupt controller. It is used as a direct -* index into the configuration data, which contains the vector -* table for the interrupt controller. -* -* @return None. -* -* @note -* -******************************************************************************/ -static void XIntc_CascadeHandler(void *DeviceId) -{ - u32 IntrStatus; - u32 IntrMask = 1; - int IntrNumber; - u32 Imr; - XIntc_Config *CfgPtr; - static int Id = 0; - - /* Get the configuration data using the device ID */ - CfgPtr = &XIntc_ConfigTable[(u32)DeviceId]; - - /* Get the interrupts that are waiting to be serviced */ - IntrStatus = XIntc_GetIntrStatus(CfgPtr->BaseAddress); - - /* Mask the Fast Interrupts */ - if (CfgPtr->FastIntr == TRUE) { - Imr = XIntc_In32(CfgPtr->BaseAddress + XIN_IMR_OFFSET); - IntrStatus &= ~Imr; - } - - /* Service each interrupt that is active and enabled by - * checking each bit in the register from LSB to MSB which - * corresponds to an interrupt input signal - */ - for (IntrNumber = 0; IntrNumber < CfgPtr->NumberofIntrs; IntrNumber++) { - if (IntrStatus & 1) { - XIntc_VectorTableEntry *TablePtr; - - /* In Cascade mode call this function recursively - * for interrupt id 31 and until interrupts of last - * instance/controller are handled - */ - if ((IntrNumber == 31) && - (CfgPtr->IntcType != XIN_INTC_LAST) && - (CfgPtr->IntcType != XIN_INTC_NOCASCADE)) { - XIntc_CascadeHandler((void *)++Id); - Id--; - } - - /* If the interrupt has been setup to - * acknowledge it before servicing the - * interrupt, then ack it */ - if (CfgPtr->AckBeforeService & IntrMask) { - XIntc_AckIntr(CfgPtr->BaseAddress, IntrMask); - } - - /* Handler of 31 interrupt Id has to be called only - * for Last controller in cascade Mode - */ - if (!((IntrNumber == 31) && - (CfgPtr->IntcType != XIN_INTC_LAST) && - (CfgPtr->IntcType != XIN_INTC_NOCASCADE))) { - - /* The interrupt is active and enabled, call - * the interrupt handler that was setup with - * the specified parameter - */ - TablePtr = &(CfgPtr->HandlerTable[IntrNumber]); - TablePtr->Handler(TablePtr->CallBackRef); - } - /* If the interrupt has been setup to acknowledge it - * after it has been serviced then ack it - */ - if ((CfgPtr->AckBeforeService & IntrMask) == 0) { - XIntc_AckIntr(CfgPtr->BaseAddress, IntrMask); - } - - /* - * Read the ISR again to handle architectures with - * posted write bus access issues. - */ - XIntc_GetIntrStatus(CfgPtr->BaseAddress); - - /* - * If only the highest priority interrupt is to be - * serviced, exit loop and return after servicing - * the interrupt - */ - if (CfgPtr->Options == XIN_SVC_SGL_ISR_OPTION) { - return; - } - } - - /* Move to the next interrupt to check */ - IntrMask <<= 1; - IntrStatus >>= 1; - - /* If there are no other bits set indicating that all interrupts - * have been serviced, then exit the loop - */ - if (IntrStatus == 0) { - break; - } - } -} -#endif diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_l.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_l.h deleted file mode 100644 index 65b660b4e..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_l.h +++ /dev/null @@ -1,327 +0,0 @@ -/****************************************************************************** -* -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xintc_l.h -* -* This header file contains identifiers and low-level driver functions (or -* macros) that can be used to access the device. The user should refer to the -* hardware device specification for more details of the device operation. -* -* -* Note that users of the driver interface given in this file can register -* an interrupt handler dynamically (at run-time) using the -* XIntc_RegisterHandler() function. -* User of the driver interface given in xintc.h should still use -* XIntc_Connect(), as always. -* Also see the discussion of the interrupt vector tables in xintc.h. -* -* There are currently two interrupt handlers specified in this interface. -* -* - XIntc_LowLevelInterruptHandler() is a handler without any arguments that -* is used in cases where there is a single interrupt controller device in -* the system and the handler cannot be passed an argument. This function is -* provided mostly for backward compatibility. -* -* - XIntc_DeviceInterruptHandler() is a handler that takes a device ID as an -* argument, indicating which interrupt controller device in the system is -* causing the interrupt - thereby supporting multiple interrupt controllers. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------------
-* 1.00b jhl  04/24/02 First release
-* 1.00c rpm  10/17/03 New release. Support the static vector table created
-*                     in the xintc_g.c configuration table.
-* 1.10c mta  03/21/07 Updated to new coding style
-* 1.11a sv   11/21/07 Updated driver to support access through a DCR bridge
-* 2.00a ktn  10/20/09 Updated to use HAL Processor APIs. _m is removed from all
-*		      the macro definitions.
-* 2.04a bss  01/13/12 Updated for adding defines for IMR and IVAR for
-*                     the FAST Interrupt
-* 2.05a bss  08/18/12 Added XIntc_RegisterFastHandler API to register fast
-*		      interrupt handlers using base address.
-* 2.07a bss  10/18/13 Added XIN_ILR_OFFSET macro for nested interrupts.
-*
-* 
-* -******************************************************************************/ - -#ifndef XINTC_L_H /* prevent circular inclusions */ -#define XINTC_L_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ - -#include "xil_types.h" -#include "xil_assert.h" -#include "xparameters.h" -#include "xil_io.h" - -/* - * XPAR_XINTC_USE_DCR_BRIDGE has to be set to 1 if the Intc device will be - * accessed through a DCR bus connected to a bridge. - */ -#define XPAR_XINTC_USE_DCR_BRIDGE 0 - -#if ((XPAR_XINTC_USE_DCR != 0) || (XPAR_XINTC_USE_DCR_BRIDGE != 0)) -#include "xio_dcr.h" -#endif - -/************************** Constant Definitions *****************************/ - -/* define the offsets from the base address for all the registers of the - * interrupt controller, some registers may be optional in the hardware device - */ -#if ((XPAR_XINTC_USE_DCR != 0) || (XPAR_XINTC_USE_DCR_BRIDGE != 0)) - -#define XIN_ISR_OFFSET 0 /* Interrupt Status Register */ -#define XIN_IPR_OFFSET 1 /* Interrupt Pending Register */ -#define XIN_IER_OFFSET 2 /* Interrupt Enable Register */ -#define XIN_IAR_OFFSET 3 /* Interrupt Acknowledge Register */ -#define XIN_SIE_OFFSET 4 /* Set Interrupt Enable Register */ -#define XIN_CIE_OFFSET 5 /* Clear Interrupt Enable Register */ -#define XIN_IVR_OFFSET 6 /* Interrupt Vector Register */ -#define XIN_MER_OFFSET 7 /* Master Enable Register */ -#define XIN_IMR_OFFSET 8 /* Interrupt Mode Register , this is present - * only for Fast Interrupt */ -#define XIN_IVAR_OFFSET 64 /* Interrupt Vector Address Register - * Interrupt 0 Offest, this is present - * only for Fast Interrupt */ - -#else /* ((XPAR_XINTC_USE_DCR != 0) || (XPAR_XINTC_USE_DCR_BRIDGE != 0)) */ - -#define XIN_ISR_OFFSET 0 /* Interrupt Status Register */ -#define XIN_IPR_OFFSET 4 /* Interrupt Pending Register */ -#define XIN_IER_OFFSET 8 /* Interrupt Enable Register */ -#define XIN_IAR_OFFSET 12 /* Interrupt Acknowledge Register */ -#define XIN_SIE_OFFSET 16 /* Set Interrupt Enable Register */ -#define XIN_CIE_OFFSET 20 /* Clear Interrupt Enable Register */ -#define XIN_IVR_OFFSET 24 /* Interrupt Vector Register */ -#define XIN_MER_OFFSET 28 /* Master Enable Register */ -#define XIN_IMR_OFFSET 32 /* Interrupt Mode Register , this is present - * only for Fast Interrupt */ -#define XIN_ILR_OFFSET 36 /* Interrupt level register */ -#define XIN_IVAR_OFFSET 0x100 /* Interrupt Vector Address Register - * Interrupt 0 Offest, this is present - * only for Fast Interrupt */ - - - -#endif /* ((XPAR_XINTC_USE_DCR != 0) || (XPAR_XINTC_USE_DCR_BRIDGE != 0)) */ - -/* Bit definitions for the bits of the MER register */ - -#define XIN_INT_MASTER_ENABLE_MASK 0x1UL -#define XIN_INT_HARDWARE_ENABLE_MASK 0x2UL /* once set cannot be cleared */ - -/**************************** Type Definitions *******************************/ - -/* The following data type defines each entry in an interrupt vector table. - * The callback reference is the base address of the interrupting device - * for the driver interface given in this file and an instance pointer for the - * driver interface given in xintc.h file. - */ -typedef struct { - XInterruptHandler Handler; - void *CallBackRef; -} XIntc_VectorTableEntry; - -typedef void (*XFastInterruptHandler) (void); - -/***************** Macros (Inline Functions) Definitions *********************/ - -/* - * Define the appropriate I/O access method to memory mapped I/O or DCR. - */ -#if ((XPAR_XINTC_USE_DCR != 0) || (XPAR_XINTC_USE_DCR_BRIDGE != 0)) - -#define XIntc_In32 XIo_DcrIn -#define XIntc_Out32 XIo_DcrOut - -#else - -#define XIntc_In32 Xil_In32 -#define XIntc_Out32 Xil_Out32 - -#endif - -/****************************************************************************/ -/** -* -* Enable all interrupts in the Master Enable register of the interrupt -* controller. The interrupt controller defaults to all interrupts disabled -* from reset such that this macro must be used to enable interrupts. -* -* @param BaseAddress is the base address of the device. -* -* @return None. -* -* @note C-style signature: -* void XIntc_MasterEnable(u32 BaseAddress); -* -*****************************************************************************/ -#define XIntc_MasterEnable(BaseAddress) \ - XIntc_Out32((BaseAddress) + XIN_MER_OFFSET, \ - XIN_INT_MASTER_ENABLE_MASK | XIN_INT_HARDWARE_ENABLE_MASK) - -/****************************************************************************/ -/** -* -* Disable all interrupts in the Master Enable register of the interrupt -* controller. -* -* @param BaseAddress is the base address of the device. -* -* @return None. -* -* @note C-style signature: -* void XIntc_MasterDisable(u32 BaseAddress); -* -*****************************************************************************/ -#define XIntc_MasterDisable(BaseAddress) \ - XIntc_Out32((BaseAddress) + XIN_MER_OFFSET, 0) - -/****************************************************************************/ -/** -* -* Enable specific interrupt(s) in the interrupt controller. -* -* @param BaseAddress is the base address of the device -* @param EnableMask is the 32-bit value to write to the enable register. -* Each bit of the mask corresponds to an interrupt input signal -* that is connected to the interrupt controller (INT0 = LSB). -* Only the bits which are set in the mask will enable interrupts. -* -* @return None. -* -* @note C-style signature: -* void XIntc_EnableIntr(u32 BaseAddress, u32 EnableMask); -* -*****************************************************************************/ -#define XIntc_EnableIntr(BaseAddress, EnableMask) \ - XIntc_Out32((BaseAddress) + XIN_IER_OFFSET, (EnableMask)) - -/****************************************************************************/ -/** -* -* Disable specific interrupt(s) in the interrupt controller. -* -* @param BaseAddress is the base address of the device -* @param DisableMask is the 32-bit value to write to the enable register. -* Each bit of the mask corresponds to an interrupt input signal -* that is connected to the interrupt controller (INT0 = LSB). -* Only the bits which are set in the mask will disable interrupts. -* -* @return None. -* -* @note C-style signature: -* void XIntc_DisableIntr(u32 BaseAddress, u32 DisableMask); -* -*****************************************************************************/ -#define XIntc_DisableIntr(BaseAddress, DisableMask) \ - XIntc_Out32((BaseAddress) + XIN_IER_OFFSET, ~(DisableMask)) - -/****************************************************************************/ -/** -* -* Acknowledge specific interrupt(s) in the interrupt controller. -* -* @param BaseAddress is the base address of the device -* @param AckMask is the 32-bit value to write to the acknowledge -* register. Each bit of the mask corresponds to an interrupt input -* signal that is connected to the interrupt controller (INT0 = -* LSB). Only the bits which are set in the mask will acknowledge -* interrupts. -* -* @return None. -* -* @note C-style signature: -* void XIntc_AckIntr(u32 BaseAddress, u32 AckMask); -* -*****************************************************************************/ -#define XIntc_AckIntr(BaseAddress, AckMask) \ - XIntc_Out32((BaseAddress) + XIN_IAR_OFFSET, (AckMask)) - -/****************************************************************************/ -/** -* -* Get the interrupt status from the interrupt controller which indicates -* which interrupts are active and enabled. -* -* @param BaseAddress is the base address of the device -* -* @return The 32-bit contents of the interrupt status register. Each bit -* corresponds to an interrupt input signal that is connected to -* the interrupt controller (INT0 = LSB). Bits which are set -* indicate an active interrupt which is also enabled. -* -* @note C-style signature: -* u32 XIntc_GetIntrStatus(u32 BaseAddress); -* -*****************************************************************************/ -#define XIntc_GetIntrStatus(BaseAddress) \ - (XIntc_In32((BaseAddress) + XIN_ISR_OFFSET) & \ - XIntc_In32((BaseAddress) + XIN_IER_OFFSET)) - -/************************** Function Prototypes ******************************/ - -/* - * Interrupt controller handlers, to be connected to processor exception - * handling code. - */ -void XIntc_LowLevelInterruptHandler(void); -void XIntc_DeviceInterruptHandler(void *DeviceId); - -/* Various configuration functions */ -void XIntc_SetIntrSvcOption(u32 BaseAddress, int Option); - -void XIntc_RegisterHandler(u32 BaseAddress, int InterruptId, - XInterruptHandler Handler, void *CallBackRef); - -void XIntc_RegisterFastHandler(u32 BaseAddress, u8 Id, - XFastInterruptHandler FastHandler); - -/************************** Variable Definitions *****************************/ - - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_options.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_options.c deleted file mode 100644 index d366b42d4..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_options.c +++ /dev/null @@ -1,146 +0,0 @@ -/****************************************************************************** -* -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xintc_options.c -* -* Contains option functions for the XIntc driver. These functions allow the -* user to configure an instance of the XIntc driver. This file requires other -* files of the component to be linked in also. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------------
-* 1.00b jhl  02/21/02 First release
-* 1.00c rpm  10/17/03 New release. Support the relocation of the options flag
-*                     from the instance structure to the xintc_g.c
-*                     configuration table.
-* 1.10c mta  03/21/07 Updated to new coding style
-* 2.00a ktn  10/20/09 Updated to use HAL Processor APIs
-* 2.06a bss  01/28/13 To support Cascade mode:
-*		      Modified XIntc_SetOptions API.
-* 
-* -******************************************************************************/ - -/***************************** Include Files *********************************/ - -#include "xil_types.h" -#include "xil_assert.h" -#include "xintc.h" - -/************************** Constant Definitions *****************************/ - - -/**************************** Type Definitions *******************************/ - - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - - -/************************** Variable Definitions *****************************/ - - -/*****************************************************************************/ -/** -* -* Set the options for the interrupt controller driver. In Cascade mode same -* Option is set to Slave controllers. -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* @param Options to be set. The available options are described in -* xintc.h. -* -* @return -* - XST_SUCCESS if the options were set successfully -* - XST_INVALID_PARAM if the specified option was not valid -* -* @note None. -* -****************************************************************************/ -int XIntc_SetOptions(XIntc * InstancePtr, u32 Options) -{ - XIntc_Config *CfgPtr; - - Xil_AssertNonvoid(InstancePtr != NULL); - Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - /* - * Make sure option request is valid - */ - if ((Options == XIN_SVC_SGL_ISR_OPTION) || - (Options == XIN_SVC_ALL_ISRS_OPTION)) { - InstancePtr->CfgPtr->Options = Options; - /* If Cascade mode set the option for all Slaves */ - if (InstancePtr->CfgPtr->IntcType != XIN_INTC_NOCASCADE) { - int Index; - for (Index = 1; Index <= XPAR_XINTC_NUM_INSTANCES - 1; - Index++) { - CfgPtr = XIntc_LookupConfig(Index); - CfgPtr->Options = Options; - } - } - return XST_SUCCESS; - } - else { - return XST_INVALID_PARAM; - } -} - -/*****************************************************************************/ -/** -* -* Return the currently set options. -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* -* @return The currently set options. The options are described in xintc.h. -* -* @note None. -* -****************************************************************************/ -u32 XIntc_GetOptions(XIntc * InstancePtr) -{ - /* - * Assert the arguments - */ - Xil_AssertNonvoid(InstancePtr != NULL); - Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - return InstancePtr->CfgPtr->Options; -} diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_selftest.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_selftest.c deleted file mode 100644 index f6ced2928..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_selftest.c +++ /dev/null @@ -1,252 +0,0 @@ -/****************************************************************************** -* -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xintc_selftest.c -* -* Contains diagnostic self-test functions for the XIntc component. This file -* requires other files of the component to be linked in also. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00b jhl  02/21/02 First release
-* 1.10c mta  03/21/07 Updated to new coding style
-* 2.00a ktn  10/20/09 Updated to use HAL Processor APIs
-* 2.04a bss  01/16/12 Removed CurrentMIE variable and reading of the
-*                     MER register to remove warnings
-* 2.06a bss  01/28/13 To support Cascade mode:
-*		      Modified XIntc_SimulateIntr API.
-* 
-* -******************************************************************************/ - -/***************************** Include Files *********************************/ - -#include "xil_types.h" -#include "xil_assert.h" -#include "xintc.h" -#include "xintc_i.h" - -/************************** Constant Definitions *****************************/ - -#define XIN_TEST_MASK 1 - -/**************************** Type Definitions *******************************/ - - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - - -/************************** Variable Definitions *****************************/ - - -/*****************************************************************************/ -/** -* -* Run a self-test on the driver/device. This is a destructive test. -* -* This involves forcing interrupts into the controller and verifying that they -* are recognized and can be acknowledged. This test will not succeed if the -* interrupt controller has been started in real mode such that interrupts -* cannot be forced. -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* -* @return -* - XST_SUCCESS if self-test is successful. -* - XST_INTC_FAIL_SELFTEST if the Interrupt controller fails the -* self-test. It will fail the self test if the device has -* previously been started in real mode. -* -* @note None. -* -******************************************************************************/ -int XIntc_SelfTest(XIntc * InstancePtr) -{ - u32 CurrentISR; - u32 Temp; - - /* - * Assert the arguments - */ - Xil_AssertNonvoid(InstancePtr != NULL); - Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - - /* - * Acknowledge all pending interrupts by reading the interrupt status - * register and writing the value to the acknowledge register - */ - Temp = XIntc_In32(InstancePtr->BaseAddress + XIN_ISR_OFFSET); - - XIntc_Out32(InstancePtr->BaseAddress + XIN_IAR_OFFSET, Temp); - - /* - * Verify that there are no interrupts by reading the interrupt status - */ - CurrentISR = XIntc_In32(InstancePtr->BaseAddress + XIN_ISR_OFFSET); - - /* - * ISR should be zero after all interrupts are acknowledged - */ - if (CurrentISR != 0) { - return XST_INTC_FAIL_SELFTEST; - } - - /* - * Set a bit in the ISR which simulates an interrupt - */ - XIntc_Out32(InstancePtr->BaseAddress + XIN_ISR_OFFSET, XIN_TEST_MASK); - - /* - * Verify that it was set - */ - CurrentISR = XIntc_In32(InstancePtr->BaseAddress + XIN_ISR_OFFSET); - - if (CurrentISR != XIN_TEST_MASK) { - return XST_INTC_FAIL_SELFTEST; - } - - /* - * Acknowledge the interrupt - */ - XIntc_Out32(InstancePtr->BaseAddress + XIN_IAR_OFFSET, XIN_TEST_MASK); - - /* - * Read back the ISR to verify that the interrupt is gone - */ - CurrentISR = XIntc_In32(InstancePtr->BaseAddress + XIN_ISR_OFFSET); - - if (CurrentISR != 0) { - return XST_INTC_FAIL_SELFTEST; - } - - return XST_SUCCESS; -} - -/*****************************************************************************/ -/** -* -* Allows software to simulate an interrupt in the interrupt controller. This -* function will only be successful when the interrupt controller has been -* started in simulation mode. Once it has been started in real mode, -* interrupts cannot be simulated. A simulated interrupt allows the interrupt -* controller to be tested without any device to drive an interrupt input -* signal into it. In Cascade mode writes to ISR of appropraite Slave -* controller depending on Id. -* -* @param InstancePtr is a pointer to the XIntc instance to be worked on. -* @param Id is the interrupt ID for which to simulate an interrupt. -* -* @return -* - XST_SUCCESS if successful -* - XST_FAILURE if the interrupt could not be -* simulated because the interrupt controller is or -* has previously been in real mode. -* -* @note None. -* -******************************************************************************/ -int XIntc_SimulateIntr(XIntc * InstancePtr, u8 Id) -{ - u32 Mask; - u32 MasterEnable; - XIntc_Config *CfgPtr; - int Index; - int DeviceId; - - /* - * Assert the arguments - */ - Xil_AssertNonvoid(InstancePtr != NULL); - Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - Xil_AssertNonvoid(Id < XPAR_INTC_MAX_NUM_INTR_INPUTS); - - - /* Get the contents of the master enable register and determine if - * hardware interrupts have already been enabled, if so, this is a write - * once bit such that simulation can't be done at this point because - * the ISR register is no longer writable by software - */ - MasterEnable = XIntc_In32(InstancePtr->BaseAddress + XIN_MER_OFFSET); - if (MasterEnable & XIN_INT_HARDWARE_ENABLE_MASK) { - return XST_FAILURE; - } - - - if (Id > 31) { - - DeviceId = Id/32; - - CfgPtr = XIntc_LookupConfig(Id/32); - Mask = XIntc_BitPosMask[Id%32]; - XIntc_Out32(CfgPtr->BaseAddress + XIN_ISR_OFFSET, Mask); - - /* Generate interrupt for 31 by writing to Interrupt Status - * register of parent controllers. Primary controller ISR - * will be written last in the loop - */ - Mask = XIntc_BitPosMask[31]; - for (Index = DeviceId - 1; Index >= 0; Index--) - { - CfgPtr = XIntc_LookupConfig(Index); - - XIntc_Out32(CfgPtr->BaseAddress + XIN_ISR_OFFSET, - Mask); - } - } - else { - /* - * The Id is used to create the appropriate mask for the - * desired bit position. - */ - Mask = XIntc_BitPosMask[Id]; - - /* - * Enable the selected interrupt source by reading the interrupt - * enable register and then modifying only the specified - * interrupt id enable - */ - XIntc_Out32(InstancePtr->BaseAddress + XIN_ISR_OFFSET, Mask); - - } - /* indicate the interrupt was successfully simulated */ - - return XST_SUCCESS; -} diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/mig_7series_v2_0/src/xmig_7series.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/mig_7series_v2_0/src/xmig_7series.h index dcd05c100..12b2884c2 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/mig_7series_v2_0/src/xmig_7series.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/mig_7series_v2_0/src/xmig_7series.h @@ -33,6 +33,9 @@ /** * * @file xmig_7series.h +* @addtogroup mig_7series_v2_0 +* @{ +* @details * This driver exists only to allow the SDK tools to create a memory test * application and to populate xparameters.h with memory range constants. * There is no source code. @@ -40,3 +43,4 @@ * 2.0 adk 19/12/13 Updated as per the New Tcl API's * ******************************************************************************/ +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_disable_dcache.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_disable_dcache.S deleted file mode 100644 index e47160be9..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_disable_dcache.S +++ /dev/null @@ -1,68 +0,0 @@ -/****************************************************************************** -* Copyright (c) 2008-2013 Xilinx, Inc. All rights reserved. -* -* Xilinx, Inc. -* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A -* COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS -* ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR -* STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION -* IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE -* FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION. -* XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO -* THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO -* ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE -* FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY -* AND FITNESS FOR A PARTICULAR PURPOSE. -* -* File : microblaze_disable_dcache.s -* Date : 2002, March 20. -* Company: Xilinx -* Group : Emerging Software Technologies -* -* Summary: -* Disable the L1 dcache on the microblaze. -* -*******************************************************************************/ - -#include "xparameters.h" - - .text - .globl microblaze_disable_dcache - .ent microblaze_disable_dcache - .align 2 -microblaze_disable_dcache: -#if XPAR_MICROBLAZE_USE_MSR_INSTR == 1 - -#if XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK != 0 - addik r1, r1, -4 - swi r15, r1, 0 - brlid r15, microblaze_flush_dcache /* microblaze_flush_dcache does not use r1*/ - nop - lwi r15, r1, 0 - addi r1, r1, 4 -#endif /* XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK != 0 */ - rtsd r15, 8 - msrclr r0, 0x80 - -#else /* XPAR_MICROBLAZE_USE_MSR_INSTR == 1 */ - - addik r1, r1, -4 - -#if XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK != 0 - swi r15, r1, 0 - brlid r15, microblaze_flush_dcache - nop -#endif /* XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK != 0 */ - mfs r11, rmsr - andi r11, r11, ~(0x80) - mts rmsr, r11 - -#if XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK != 0 - lwi r15, r1, 0 -#endif /* XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK != 0 */ - - rtsd r15, 8 - addi r1, r1, 4 - -#endif /*XPAR_MICROBLAZE_USE_MSR_INSTR == 1*/ - .end microblaze_disable_dcache diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/_profile_timer_hw.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/_profile_timer_hw.c deleted file mode 100644 index f3552b8c8..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/_profile_timer_hw.c +++ /dev/null @@ -1,360 +0,0 @@ -// $Id: _profile_timer_hw.c,v 1.1.2.1 2011/05/17 04:37:56 sadanan Exp $ -/****************************************************************************** -* -* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -****************************************************************************** -* -* _program_timer_hw.c: -* Timer related functions -* -******************************************************************************/ - -#include "profile.h" -#include "_profile_timer_hw.h" - -#include "xil_exception.h" - -#ifdef PROC_PPC -#include "xtime_l.h" -#include "xpseudo_asm.h" -#endif - -#ifdef TIMER_CONNECT_INTC -#include "xintc_l.h" -#include "xintc.h" -#endif // TIMER_CONNECT_INTC - -//#ifndef PPC_PIT_INTERRUPT -#if (!defined PPC_PIT_INTERRUPT && !defined PROC_CORTEXA9) -#include "xtmrctr_l.h" -#endif - -extern unsigned int timer_clk_ticks ; - -//-------------------------------------------------------------------- -// PowerPC Target - Timer related functions -//-------------------------------------------------------------------- -#ifdef PROC_PPC405 - - -//-------------------------------------------------------------------- -// PowerPC PIT Timer Init. -// Defined only if PIT Timer is used for Profiling -// -//-------------------------------------------------------------------- -#ifdef PPC_PIT_INTERRUPT -int ppc_pit_init( void ) -{ - // 1. Register Profile_intr_handler as Interrupt handler - // 2. Set PIT Timer Interrupt and Enable it. - Xil_ExceptionRegisterHandler( XIL_EXCEPTION_ID_PIT_INT, - (Xil_ExceptionHandler)profile_intr_handler,(void *)0); - XTime_PITSetInterval( timer_clk_ticks ) ; - XTime_PITEnableAutoReload() ; - return 0; -} -#endif - - -//-------------------------------------------------------------------- -// PowerPC Timer Initialization functions. -// For PowerPC, PIT and opb_timer can be used for Profiling. This -// is selected by the user in standalone BSP -// -//-------------------------------------------------------------------- -int powerpc405_init() -{ - Xil_ExceptionInit() ; - Xil_ExceptionDisableMask( XIL_EXCEPTION_NON_CRITICAL ) ; - - // Initialize the Timer. - // 1. If PowerPC PIT Timer has to be used, initialize PIT timer. - // 2. Else use opb_timer. It can be directly connected or thru intc to PowerPC -#ifdef PPC_PIT_INTERRUPT - ppc_pit_init(); -#else -#ifdef TIMER_CONNECT_INTC - Xil_ExceptionRegisterHandler( XIL_EXCEPTION_ID_NON_CRITICAL_INT, - (Xil_ExceptionHandler)XIntc_DeviceInterruptHandler,(void *)0); - XIntc_RegisterHandler( INTC_BASEADDR, PROFILE_TIMER_INTR_ID, - (XInterruptHandler)profile_intr_handler,(void*)0); -#else - Xil_ExceptionRegisterHandler( XIL_EXCEPTION_ID_NON_CRITICAL_INT, - (Xil_ExceptionHandler)profile_intr_handler,(void *)0); -#endif - // Initialize the timer with Timer Ticks - opb_timer_init() ; -#endif - - // Enable Interrupts in the System, if Profile Timer is the only Interrupt - // in the System. -#ifdef ENABLE_SYS_INTR -#ifdef PPC_PIT_INTERRUPT - XTime_PITEnableInterrupt() ; -#elif TIMER_CONNECT_INTC - XIntc_MasterEnable( INTC_BASEADDR ); - XIntc_SetIntrSvcOption( INTC_BASEADDR, XIN_SVC_ALL_ISRS_OPTION); - XIntc_EnableIntr( INTC_BASEADDR, PROFILE_TIMER_INTR_MASK ); -#endif - Xil_ExceptionEnableMask( XIL_EXCEPTION_NON_CRITICAL ) ; -#endif - return 0; -} - -#endif // PROC_PPC - - - -//-------------------------------------------------------------------- -// PowerPC440 Target - Timer related functions -//-------------------------------------------------------------------- -#ifdef PROC_PPC440 - - -//-------------------------------------------------------------------- -// PowerPC DEC Timer Init. -// Defined only if DEC Timer is used for Profiling -// -//-------------------------------------------------------------------- -#ifdef PPC_PIT_INTERRUPT -int ppc_dec_init( void ) -{ - // 1. Register Profile_intr_handler as Interrupt handler - // 2. Set DEC Timer Interrupt and Enable it. - Xil_ExceptionRegisterHandler( XIL_EXCEPTION_ID_DEC_INT, - (Xil_ExceptionHandler)profile_intr_handler,(void *)0); - XTime_DECSetInterval( timer_clk_ticks ) ; - XTime_DECEnableAutoReload() ; - return 0; -} -#endif - - -//-------------------------------------------------------------------- -// PowerPC Timer Initialization functions. -// For PowerPC, DEC and opb_timer can be used for Profiling. This -// is selected by the user in standalone BSP -// -//-------------------------------------------------------------------- -int powerpc405_init(void) -{ - Xil_ExceptionInit(); - Xil_ExceptionDisableMask( XIL_EXCEPTION_NON_CRITICAL ) ; - - // Initialize the Timer. - // 1. If PowerPC DEC Timer has to be used, initialize DEC timer. - // 2. Else use opb_timer. It can be directly connected or thru intc to PowerPC -#ifdef PPC_PIT_INTERRUPT - ppc_dec_init(); -#else -#ifdef TIMER_CONNECT_INTC - Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_NON_CRITICAL_INT, - (Xil_ExceptionHandler)XIntc_DeviceInterruptHandler,(void *)0); - - XIntc_RegisterHandler( INTC_BASEADDR, PROFILE_TIMER_INTR_ID, - (XInterruptHandler)profile_intr_handler,(void*)0); -#else - Xil_ExceptionRegisterHandler( XIL_EXCEPTION_ID_NON_CRITICAL_INT, - (Xil_ExceptionHandler)profile_intr_handler,(void *)0); - Xil_ExceptionRegisterHandler( XIL_EXCEPTION_ID_NON_CRITICAL_INT, - (Xil_ExceptionHandler)profile_intr_handler,(void *)0); -#endif - // Initialize the timer with Timer Ticks - opb_timer_init() ; -#endif - - // Enable Interrupts in the System, if Profile Timer is the only Interrupt - // in the System. -#ifdef ENABLE_SYS_INTR -#ifdef PPC_PIT_INTERRUPT - XTime_DECEnableInterrupt() ; -#elif TIMER_CONNECT_INTC - XIntc_MasterEnable( INTC_BASEADDR ); - XIntc_SetIntrSvcOption( INTC_BASEADDR, XIN_SVC_ALL_ISRS_OPTION); - XIntc_EnableIntr( INTC_BASEADDR, PROFILE_TIMER_INTR_MASK ); -#endif - Xil_ExceptionEnableMask( XEXC_NON_CRITICAL ) ; -#endif - return 0; -} - -#endif // PROC_PPC440 - -//-------------------------------------------------------------------- -// opb_timer Initialization for PowerPC and MicroBlaze. This function -// is not needed if DEC timer is used in PowerPC -// -//-------------------------------------------------------------------- -//#ifndef PPC_PIT_INTERRUPT -#if (!defined PPC_PIT_INTERRUPT && !defined PROC_CORTEXA9) -int opb_timer_init( void ) -{ - // set the number of cycles the timer counts before interrupting - XTmrCtr_SetLoadReg(PROFILE_TIMER_BASEADDR, 0, timer_clk_ticks); - - // reset the timers, and clear interrupts - XTmrCtr_SetControlStatusReg(PROFILE_TIMER_BASEADDR, 0, - XTC_CSR_INT_OCCURED_MASK | XTC_CSR_LOAD_MASK ); - - // start the timers - XTmrCtr_SetControlStatusReg(PROFILE_TIMER_BASEADDR, 0, XTC_CSR_ENABLE_TMR_MASK - | XTC_CSR_ENABLE_INT_MASK | XTC_CSR_AUTO_RELOAD_MASK | XTC_CSR_DOWN_COUNT_MASK); - return 0; -} -#endif - - -//-------------------------------------------------------------------- -// MicroBlaze Target - Timer related functions -//-------------------------------------------------------------------- -#ifdef PROC_MICROBLAZE - -//-------------------------------------------------------------------- -// Initialize the Profile Timer for MicroBlaze Target. -// For MicroBlaze, opb_timer is used. The opb_timer can be directly -// connected to MicroBlaze or connected through Interrupt Controller. -// -//-------------------------------------------------------------------- -int microblaze_init(void) -{ - // Register profile_intr_handler - // 1. If timer is connected to Interrupt Controller, register the handler - // to Interrupt Controllers vector table. - // 2. If timer is directly connected to MicroBlaze, register the handler - // as Interrupt handler - Xil_ExceptionInit(); - -#ifdef TIMER_CONNECT_INTC - XIntc_RegisterHandler( INTC_BASEADDR, PROFILE_TIMER_INTR_ID, - (XInterruptHandler)profile_intr_handler,(void*)0); -#else - Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, - (Xil_ExceptionHandler)profile_intr_handler, - (void *)0) ; -#endif - - // Initialize the timer with Timer Ticks - opb_timer_init() ; - - // Enable Interrupts in the System, if Profile Timer is the only Interrupt - // in the System. -#ifdef ENABLE_SYS_INTR -#ifdef TIMER_CONNECT_INTC - XIntc_MasterEnable( INTC_BASEADDR ); - XIntc_SetIntrSvcOption( INTC_BASEADDR, XIN_SVC_ALL_ISRS_OPTION); - XIntc_EnableIntr( INTC_BASEADDR, PROFILE_TIMER_INTR_MASK ); - Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, - (Xil_ExceptionHandler)XIntc_DeviceInterruptHandler,(void *)0); -#endif - -#endif - - Xil_ExceptionEnable(); - - return 0; - -} - -#endif // PROC_MICROBLAZE - - - -//-------------------------------------------------------------------- -// Cortex A9 Target - Timer related functions -//-------------------------------------------------------------------- -#ifdef PROC_CORTEXA9 - -//-------------------------------------------------------------------- -// Initialize the Profile Timer for Cortex A9 Target. -// The scu private timer is connected to the Scu GIC controller. -// -//-------------------------------------------------------------------- -int scu_timer_init( void ) -{ - // set the number of cycles the timer counts before interrupting - // scu timer runs at half the cpu clock - XScuTimer_SetLoadReg(PROFILE_TIMER_BASEADDR, timer_clk_ticks/2); - - // clear any pending interrupts - XScuTimer_SetIntrReg(PROFILE_TIMER_BASEADDR, 1); - - // enable interrupts, auto-reload mode and start the timer - XScuTimer_SetControlReg(PROFILE_TIMER_BASEADDR, XSCUTIMER_CONTROL_IRQ_ENABLE_MASK | - XSCUTIMER_CONTROL_AUTO_RELOAD_MASK | XSCUTIMER_CONTROL_ENABLE_MASK); - - return 0; -} - -int cortexa9_init(void) -{ - - Xil_ExceptionInit(); - - XScuGic_DeviceInitialize(0); - - /* - * Connect the interrupt controller interrupt handler to the hardware - * interrupt handling logic in the processor. - */ - Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT, - (Xil_ExceptionHandler)XScuGic_DeviceInterruptHandler, - (void *)0); - - /* - * Connect the device driver handler that will be called when an - * interrupt for the device occurs, the handler defined above performs - * the specific interrupt processing for the device. - */ - XScuGic_RegisterHandler(SCUGIC_CPU_BASEADDR, - PROFILE_TIMER_INTR_ID, - (Xil_ExceptionHandler)profile_intr_handler, - (void *)0); - - /* - * Enable the interrupt for scu timer. - */ - XScuGic_EnableIntr(SCUGIC_DIST_BASEADDR, PROFILE_TIMER_INTR_ID); - - /* - * Enable interrupts in the Processor. - */ - Xil_ExceptionEnableMask(XIL_EXCEPTION_IRQ); - - /* - * Initialize the timer with Timer Ticks - */ - scu_timer_init() ; - - Xil_ExceptionEnable(); - - return 0; -} - -#endif // PROC_CORTEXA9 diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xdebug.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xdebug.h deleted file mode 100644 index 899173cf0..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xdebug.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef XDEBUG -#define XDEBUG - -#if defined(DEBUG) && !defined(NDEBUG) - -#ifndef XDEBUG_WARNING -#define XDEBUG_WARNING -#warning DEBUG is enabled -#endif - -int printf(const char *format, ...); - -#define XDBG_DEBUG_ERROR 0x00000001 /* error condition messages */ -#define XDBG_DEBUG_GENERAL 0x00000002 /* general debug messages */ -#define XDBG_DEBUG_ALL 0xFFFFFFFF /* all debugging data */ - -#define XDBG_DEBUG_FIFO_REG 0x00000100 /* display register reads/writes */ -#define XDBG_DEBUG_FIFO_RX 0x00000101 /* receive debug messages */ -#define XDBG_DEBUG_FIFO_TX 0x00000102 /* transmit debug messages */ -#define XDBG_DEBUG_FIFO_ALL 0x0000010F /* all fifo debug messages */ - -#define XDBG_DEBUG_TEMAC_REG 0x00000400 /* display register reads/writes */ -#define XDBG_DEBUG_TEMAC_RX 0x00000401 /* receive debug messages */ -#define XDBG_DEBUG_TEMAC_TX 0x00000402 /* transmit debug messages */ -#define XDBG_DEBUG_TEMAC_ALL 0x0000040F /* all temac debug messages */ - -#define XDBG_DEBUG_TEMAC_ADPT_RX 0x00000800 /* receive debug messages */ -#define XDBG_DEBUG_TEMAC_ADPT_TX 0x00000801 /* transmit debug messages */ -#define XDBG_DEBUG_TEMAC_ADPT_IOCTL 0x00000802 /* ioctl debug messages */ -#define XDBG_DEBUG_TEMAC_ADPT_MISC 0x00000803 /* debug msg for other routines */ -#define XDBG_DEBUG_TEMAC_ADPT_ALL 0x0000080F /* all temac adapter debug messages */ - -#define xdbg_current_types (XDBG_DEBUG_ERROR) - -#define xdbg_stmnt(x) x - -/* In VxWorks, if _WRS_GNU_VAR_MACROS is defined, special syntax is needed for - * macros that accept variable number of arguments - */ -#if defined(XENV_VXWORKS) && defined(_WRS_GNU_VAR_MACROS) -#define xdbg_printf(type, args...) (((type) & xdbg_current_types) ? printf (## args) : 0) -#else /* ANSI Syntax */ -#define xdbg_printf(type, ...) (((type) & xdbg_current_types) ? printf (__VA_ARGS__) : 0) -#endif - -#else /* defined(DEBUG) && !defined(NDEBUG) */ - -#define xdbg_stmnt(x) - -/* See VxWorks comments above */ -#if defined(XENV_VXWORKS) && defined(_WRS_GNU_VAR_MACROS) -#define xdbg_printf(type, args...) -#else /* ANSI Syntax */ -#define xdbg_printf(...) -#endif - -#endif /* defined(DEBUG) && !defined(NDEBUG) */ - -#endif /* XDEBUG */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/Makefile b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/Makefile similarity index 94% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/Makefile rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/Makefile index fd759d6e3..40c3c82dd 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/Makefile +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/Makefile @@ -1,6 +1,6 @@ ############################################################################### # -# Copyright (C) 2012 - 2014 Xilinx, Inc. All rights reserved. +# Copyright (C) 2012 - 2014 Xilinx, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -27,11 +27,12 @@ # Except as contained in this notice, the name of the Xilinx shall not be used # in advertising or otherwise to promote the sale, use or other dealings in # this Software without prior written authorization from Xilinx. -###################################################################### +# +############################################################################### # The following are defined in config.make # LIBSOURCES - Based on if MicroBlaze support Exceptions -# LIBS - Do Build Profile Libraries +# LIBS - Do Build Profile Libraries include config.make AS=mb-as @@ -49,7 +50,7 @@ RELEASEDIR=../../../lib INCLUDEDIR=../../../include INCLUDES=-I./. -I${INCLUDEDIR} -OUTS = *.o +OUTS = *.o INCLUDEFILES=*.h @@ -58,7 +59,7 @@ libs: $(LIBS) standalone_libs: $(LIBSOURCES) echo "Compiling standalone"; $(CC) $(CC_FLAGS) $(ECC_FLAGS) $(INCLUDES) $^ - $(AR) -r ${RELEASEDIR}/${LIB} ${OUTS} + $(AR) -r ${RELEASEDIR}/${LIB} ${OUTS} profile_libs: $(MAKE) -C profile COMPILER_FLAGS="$(COMPILER_FLAGS)" EXTRA_COMPILER_FLAGS="$(EXTRA_COMPILER_FLAGS)" COMPILER="$(CC)" ARCHIVER="$(AR)" AS="$(AS)" libs diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/_exit.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/_exit.c similarity index 90% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/_exit.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/_exit.c index 3ffa16786..3fb2ec63a 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/_exit.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/_exit.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2012 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2012 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -31,11 +31,16 @@ ******************************************************************************/ #include +#include "xil_types.h" +void _exit (sint32 status); /* _exit - Simple implementation. Does not return. */ -void _exit (int status) +void _exit (sint32 status) { (void) status; - while (1); + while (1) + { + ; + } } diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/bspconfig.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/bspconfig.h similarity index 89% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/bspconfig.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/bspconfig.h index 855a33c15..4dd178f04 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/bspconfig.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/bspconfig.h @@ -5,7 +5,7 @@ * Version: * DO NOT EDIT. * -* Copyright (C) 2010-2015 Xilinx, Inc. All Rights Reserved.* +* Copyright (C) 2010-2016 Xilinx, Inc. All Rights Reserved.* *Permission is hereby granted, free of charge, to any person obtaining a copy *of this software and associated documentation files (the Software), to deal *in the Software without restriction, including without limitation the rights @@ -22,8 +22,8 @@ * *THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -*XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +*XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, *WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT *OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/changelog.txt b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/changelog.txt similarity index 58% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/changelog.txt rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/changelog.txt index f985a0910..ad9c771e1 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/changelog.txt +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/changelog.txt @@ -3,7 +3,7 @@ * * Ver Who Date Changes * ----- ---- -------- --------------------------------------------------- - * 3.02a sdm 05/30/11 Added Xuint64 typedef and XUINT64_MSW/XUINT64_LSW macros + * 3.02a sdm 05/30/11 Added Xuint64 typedef and XUINT64_MSW/XUINT64_LSW macros * 3.02a sdm 06/27/11 Added INST_SYNC and DATA_SYNC macros for all the CPUs * 3.02a sdm 07/07/11 Updated ppc440 boot.S to set guarded bit for all but * cacheable regions @@ -94,13 +94,13 @@ * Relocated COUNTS_PER_SECOND from sleep.c to xtime_l.h. This * fixes the CR #692094. * 3.09a sgd 02/14/13 Fix for CRs 697094 (SI#687034) and 675552. - * 3.10a srt 04/18/13 Implemented ARM Erratas. + * 3.10a srt 04/18/13 Implemented ARM Erratas. * Cortex A9 Errata - 742230, 743622, 775420, 794073 * L2Cache PL310 Errata - 588369, 727915, 759370 * Please refer to file 'xil_errata.h' for errata * description. * 3.10a asa 05/04/13 Added support for L2 cache in MicroBlaze BSP. The older - * cache APIs were corresponding to only Layer 1 cache + * cache APIs were corresponding to only Layer 1 cache * memories. New APIs were now added and the existing cache * related APIs were changed to provide a uniform interface * to flush/invalidate/enable/disable the complete cache @@ -115,13 +115,13 @@ * microblaze_invalidate_cache_ext.S-> Invalidates L2 cache * microblaze_invalidate_cache_ext_range -> Invalidates a * range of memory in L2 cache. - * These changes are done to implement PR #697214. + * These changes are done to implement PR #697214. * 3.10a asa 05/13/13 Modified cache disable APIs at src/cortexa9/xil_cache.c to * fix the CR #706464. L2 cache disabling happens independent * of L1 data cache disable operation. Changes are done in the - * same file in cache handling APIs to do a L2 cache sync - * (poll reg7_?cache_?sync). This fixes CR #700542. - * 3.10a asa 05/20/13 Added API/Macros for enabling and disabling nested + * same file in cache handling APIs to do a L2 cache sync + * (poll reg7_?cache_?sync). This fixes CR #700542. + * 3.10a asa 05/20/13 Added API/Macros for enabling and disabling nested * interrupts for ARM. These are done to fix the CR#699680. * 3.10a srt 05/20/13 Made changes in cache maintenance APIs to do a proper cach * sync operation. This fixes the CR# 716781. @@ -131,11 +131,11 @@ * fix issues related to NEON context saving. The assembly * routines for IRQ and FIQ handling are modified. * Deprecated the older BSP (3.10a). - * 3.11a asa 09/22/13 Fix for CR#732704. Cache APIs are modified to avoid + * 3.11a asa 09/22/13 Fix for CR#732704. Cache APIs are modified to avoid * various potential issues. Made changes in the function * Xil_SetAttributes in file xil_mmu.c. * 3.11a asa 09/23/13 Added files xil_misc_psreset_api.c and xil_misc_psreset_api.h - * in src\cortexa9 and src\microblaze folders. + * in src\cortexa9 and src\microblaze folders. * 3.11a asa 09/28/13 Modified the cache APIs (src\cortexa9) to fix handling of * L2 cache sync operation and to fix issues around complete * L2 cache flush/invalidation by ways. @@ -143,23 +143,23 @@ * to fix linking issues with armcc/DS-5. Modified the armcc * makefile to fix issues. * 3.12a asa 11/15/13 Fix for CR#754800. It fixes issues around profiling for MB. - * 4.0 hk 12/13/13 Added check for STDOUT_BASEADDRESS where outbyte is used. + * 4.0 hk 12/13/13 Added check for STDOUT_BASEADDRESS where outbyte is used. * 4.0 pkp 22/01/14 Modified return addresses for interrupt handlers (DataAbortHandler - * and SWIHandler) in asm_vector.S (src\cortexa9\gcc\ and + * and SWIHandler) in asm_vector.S (src\cortexa9\gcc\ and * src\cortexa9\armcc\) to fix CR#767251 - * 4.0 pkp 24/01/14 Modified cache APIs (Xil_DCacheInvalidateRange and + * 4.0 pkp 24/01/14 Modified cache APIs (Xil_DCacheInvalidateRange and * Xil_L1DCacheInvalidate) in xil_cache.c (src\cortexa9) to fix the bugs. * Few cache lines were missed to invalidate when unaligned address - * invalidation was accommodated in Xil_DCacheInvalidateRange. + * invalidation was accommodated in Xil_DCacheInvalidateRange. * In Xil_L1DCacheInvalidate, while invalidating all L1D cache * stack memory (which contains return address) was invalidated. So * stack memory is flushed first and then L1D cache is invalidated. * This is done to fix CR #763829 - * 4.0 adk 22/02/2014 Fixed the CR:775379 removed unnecessay _t(unit32_t etc) from - * mblaze_nt_types.h file and replace uint32_t with u32 in the - * profile_hist.c to fix the above CR. + * 4.0 adk 22/02/2014 Fixed the CR:775379 removed unnecessay _t(unit32_t etc) from + * mblaze_nt_types.h file and replace uint32_t with u32 in the + * profile_hist.c to fix the above CR. * 4.1 bss 04/14/14 Updated driver tcl to remove _interrupt_handler.o from libgloss.a - * instead of libxil.a and added prototypes for + * instead of libxil.a and added prototypes for * microblaze_invalidate_cache_ext and microblaze_flush_cache_ext in * mb_interface.h * 4.1 hk 04/18/14 Add sleep function. @@ -173,28 +173,28 @@ * Fix for CR#764881. * 4.1 srt 06/27/14 Remove '#undef DEBUG' from src/common/xdebug.h, which allows to * output the DEBUG logs when -DDEBUG flag is enabled in BSP. - * 4.2 pkp 06/27/14 Added support for IAR compiler in src/cortexa9/iccarm. + * 4.2 pkp 06/27/14 Added support for IAR compiler in src/cortexa9/iccarm. * Also added explanatory notes in cortexa9/xil_cache.c for CR#785243. * 4.2 pkp 06/19/14 Asynchronous abort has been enabled into cortexa9/gcc/boot.s and - * cortexa9/armcc/boot.s. Added default exception handlers for data + * cortexa9/armcc/boot.s. Added default exception handlers for data * abort and prefetch abort using handlers called - * DataAbortHandler and PrefetchAbortHandler respectively in + * DataAbortHandler and PrefetchAbortHandler respectively in * cortexa9/xil_exception.c to fix CR#802862. - * 4.2 pkp 06/30/14 MakeFile for cortexa9/armcc has been changed to fixes the - * issue of improper linking of translation_table.s + * 4.2 pkp 06/30/14 MakeFile for cortexa9/armcc has been changed to fixes the + * issue of improper linking of translation_table.s * 4.2 pkp 07/04/14 added weak attribute for the function in BSP which are also present * in tool chain to avoid conflicts into some special cases - * 4.2 pkp 07/21/14 Corrected reset value of event counter in function + * 4.2 pkp 07/21/14 Corrected reset value of event counter in function * Xpm_ResetEventCounters in src/cortexa9/xpm_counter.c to fix CR#796275 - * 4.2 pkp 07/21/14 Included xil_types.h file in xil_mmu.h which had contained a function - * containing type def u32 defined in xil_types.g to resolve issue of + * 4.2 pkp 07/21/14 Included xil_types.h file in xil_mmu.h which had contained a function + * containing type def u32 defined in xil_types.g to resolve issue of * CR#805869 - * 4.2 pkp 08/04/14 Removed unimplemented nanosleep routine from cortexa9/usleep.c as + * 4.2 pkp 08/04/14 Removed unimplemented nanosleep routine from cortexa9/usleep.c as * it is not possible to generate timer in nanosecond due to limited * cpu frequency - * 4.2 pkp 08/04/14 Removed PEEP board related code which contained initialization of + * 4.2 pkp 08/04/14 Removed PEEP board related code which contained initialization of * uart, smc nor and sram from cortexa9/gcc/xil-crt0.s and armcc/boot.s - * and iccarm/boot.s. Also uart.c and smc.c have been removed. Also + * and iccarm/boot.s. Also uart.c and smc.c have been removed. Also * removed function definition of XSmc_NorInit and XSmc_NorInit from * cortexa9/smc.h * 4.2 bss 08/11/14 Added microblaze_flush_cache_ext_range and microblaze_invalidate_ @@ -209,4 +209,116 @@ * 4.2 pkp 09/11/14 modified translation table entries in cortexa9/iccarm/translation_table.s * and cortexa9/armcc/translation_table.s to resolve compilation * error for solving CR#822897 -******************************************************************************************/ + * 5.0 kvn 12/9/14 Support for Zync Ultrascale Mp.Also modified code for + * MISRA-C:2012 compliance. + * 5.0 pkp 12/15/14 Added APIs to get information about the platforms running the code by + * adding src/common/xplatform_info.*s + * 5.0 pkp 16/12/14 Modified boot code to enable scu after MMU is enabled and + * removed incorrect initialization of TLB lockdown register to fix + * CR#830580 in cortexa9/gcc/boot.S & cpu_init.S, armcc/boot.S + * and iccarm/boot.s + * 5.0 pkp 25/02/15 Modified floating point flag to vfpv3 from vfpv3_d16 in BSP MakeFile + * for iccarm and armcc compiler of cortexA9 + * 5.1 pkp 05/13/15 Changed the initialization order in cortexa9/gcc/boot.S, iccarm/boot.s + * and armcc/boot.s so to first invalidate caches and TLB, enable MMU and + * caches, then enable SMP bit in ACTLR. L2Cache invalidation and enabling + * of L2Cache is done later. + * 5.1 pkp 12/05/15 Modified cortexa9/xil_cache.c to modify Xil_DCacheInvalidateRange and + * Xil_DCacheFlushRange to remove unnecessary dsb which is unnecessarily + * taking long time to fix CR#853097. L2CacheSync is added into + * Xil_L2CacheInvalidateRange API. Xil_L1DCacheInvalidate and + * Xil_L2CacheInvalidate APIs are modified to flush the complete stack + * instead of just System Stack + * 5.1 pkp 14/05/15 Modified cortexa9/gcc/Makefile to keep a correct check of a compiler + * to update ECC_FLAGS and also take the compiler and archiver as specified + * in settings instead of hardcoding it. + * 5.2 pkp 06/08/15 Modified cortexa9/gcc/translation_table.S to put a check for + * XPAR_PS7_DDR_0_S_AXI_BASEADDR to confirm if DDR is present or not and + * accordingly generate the translation table + * 5.2 pkp 23/07/15 Modified cortexa9/gcc/Makefile to keep a correct check of a compiler + * to update ECC_FLAGS to fix a bug introduced during new version creation + * of BSP. + * 5.3 pkp 10/07/15 Modified cortexa9/xil_cache.c file to change cache API so that L2 Cache + * functionalities are avoided for the OpenAMP slave application(when + * USE_AMP flag is defined for BSP) as master CPU would be utilizing L2 + * cache for its operation. Also file operations such as read, write, + * close, open are also avoided for OpenAMP support(when USE_AMP flag is + * defined for BSP) because XilOpenAMP library contains own file operation. + * The xil-crt0.S file is modified for not initializing global timer for + * OpenAMP application as it might be already in use by master CPU + * 5.3 pkp 10/09/15 Modified cortexa9/iccarm/xpseudo_asm_iccarm.h file to change function + * definition for dsb, isb and dmb to fix the compilation error when used + * kvn 16/10/15 Encapsulated assembly code into macros for R5 xil_cache file. + * 5.4 pkp 09/11/15 Modified cortexr5/gcc/boot.S to disable ACTLR.DBWR bit to avoid potential + * R5 deadlock for errata 780125 + * 5.4 pkp 09/11/15 Modified cortexa53/32bit/gcc/boot.S to enable I-Cache and D-Cache for a53 + * 32 bit BSP in the initialization + * 5.4 pkp 09/11/15 Modified cortexa9/xil_misc_psreset_api.c file to change the description + * for XOcm_Remap function + * 5.4 pkp 16/11/15 Modified microblaze/xil_misc_psreset_api.c file to change the description + * for XOcm_Remap function + * kvn 21/11/15 Added volatile keyword for ADDR varibles in Xil_Out API + * kvn 21/11/15 Changed ADDR variable type from u32 to UINTPTR. This is + * required for MISRA-C:2012 Compliance. + * 5.4 pkp 23/11/15 Added attribute definitions for Xil_SetTlbAttributes API of Cortex-A9 + * in cortexa9/xil_mmu.h + * 5.4 pkp 23/11/15 Added default undefined exception handler for Cortex-A9 + * 5.4 pkp 11/12/15 Modified common/xplatform_info.h to add #defines for silicon for + * checking the current executing platform + * 5.4 pkp 18/12/15 Modified cortexa53/32bit/gcc/xil-crt0.S and 64bit/gcc/xil-crt0.S + * to initialize global constructor for C++ applications + * 5.4 pkp 18/12/15 Modified cortexr5/gcc/xil-crt0.S to initialize global constructor for + * C++ applications + * 5.4 pkp 18/12/15 Modified cortexa53/32bit/gcc/translation_table.S and 64bit/gcc/ + * translation_table.S to update the translation table according to proper + * address map + * 5.4 pkp 18/12/15 Modified cortexar5/mpu.c to initialize the MPU according to proper + * address map + * 5.4 pkp 05/01/16 Modified cortexa53/64bit/boot.S to set the reset vector register RVBAR + * equivalent to vector table base address + * 5.4 pkp 08/01/16 Modified cortexa9/gcc/Makefile to update the extra compiler flag + * as per the toolchain update + * 5.4 pkp 12/01/16 Changed common/xplatform_info.* to add platform information support + * for Cortex-A53 32bit mode + * 5.4 pkp 28/01/16 Modified cortexa53/32bit/sleep.c and usleep.c & cortexa53/64bit/sleep.c + * and usleep.c to correct routines to avoid hardcoding the timer frequency, + * instead take it from xparameters.h to properly configure the timestamp + * clock frequency + * 5.4 asa 29/01/16 Modified microblaze/mb_interface.h to add macros that support the + * new instructions for MB address extension feature + * 5.4 kvn 30/01/16 Modified xparameters_ps.h file to add interrupt ID number for + * system monitor. + * 5.4 pkp 04/02/16 Modified cortexr5/gcc/boot.S to enable fault log for lock-step mode + * 5.4 pkp 19/02/16 Modified cortexr5/xtime_l.c to add an API XTime_StartTimer and updated + * cortexr5/xil-crt0.S to configure the TTC3 timer when present. Modified + * cortexr5/sleep.c, cortexr5/usleep.c to use TTC3 when present otherwise + * use set of assembly instructions to provide required delay to fix + * CR#913249. + * 5.4 asa 25/02/16 Made changes in xil-crt0.S for R5, A53 64 and 32 bit BSPs, to replace + * _exit with exit. We should not be directly calling _exit and should + * always use the library exit. This fixes the CR#937036. + * 5.4 pkp 25/02/16 Made change to cortexr5/gcc/boot.S to initialize the floating point + * registers, banked registers for various modes and enabled + * the cache ECC check before enabling the fault log for lock step mode + * Also modified the cortexr5/gcc/Makefile to support floating point + * registers initialization in boot code. + * 5.4 pkp 03/01/16 Updated the exit function in cortexr5/gcc/_exit.c to enable the debug + * logic in case of lock-step mode when fault log is enabled to fix + * CR#938281 + * 5.4 pkp 03/02/16 Modified cortexa9/iccarm/xpseudo_asm_iccarm.h file to include + * header file instrinsics.h which contains assembly instructions + * definitions which can be used by C + * 5.4 asa 03/02/16 Added print.c in MB BSP. Made other cosmetic changes to have uniform + * proto for all print.c across the BSPs. This patch fixes CR#938738. + * 5.4 pkp 03/09/16 Modified cortexr5/sleep.c and usleep.c to avoid disabling the + * interrupts when sleep/usleep is being executed using assembly + * instructions to fix CR#913249. + * 5.4 pkp 03/11/16 Modified cortexr5/xtime_l.c to avoid enabling overflow interrupt, + * instead modified cortexr5/sleep.c and usleep.c to poll the counter + * value and compare it with previous value to detect the overflow + * to fix CR#940209. + * 5.4 pkp 03/24/16 Modified cortexr5/boot.S to reset the dbg_lpd_reset before enabling + * the fault log to avoid intervention for lock-step mode and cortexr5/ + * _exit.c to enable the dbg_lpd_reset once the fault log is disabled + * to fix CR#947335 + *****************************************************************************************/ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/config.make b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/config.make similarity index 100% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/config.make rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/config.make diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/errno.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/errno.c similarity index 75% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/errno.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/errno.c index 9fa8f6a32..3d6fb2027 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/errno.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/errno.c @@ -4,9 +4,11 @@ #include #include +#include "xil_types.h" +sint32 * __errno (void); -int * -__errno () +sint32 * +__errno (void) { return &_REENT->_errno; } diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/fcntl.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/fcntl.c similarity index 60% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/fcntl.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/fcntl.c index 1ee9a86e5..257cee565 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/fcntl.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/fcntl.c @@ -1,10 +1,12 @@ #include +#include "xil_types.h" +sint32 fcntl (sint32 fd, sint32 cmd, sint32 arg); /* * fcntl -- Manipulate a file descriptor. * We don't have a filesystem, so we do nothing. */ -int fcntl (int fd, int cmd, long arg) +sint32 fcntl (sint32 fd, sint32 cmd, sint32 arg) { (void) fd; (void) cmd; diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/fsl.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/fsl.h similarity index 95% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/fsl.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/fsl.h index 2215732c8..29906d956 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/fsl.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/fsl.h @@ -1,5 +1,5 @@ -#ifndef _FSL_H -#define _FSL_H +#ifndef FSL_H +#define FSL_H #include "mb_interface.h" /* Legacy reasons. We just have to include this guy who defines the FSL stuff */ @@ -8,7 +8,7 @@ extern "C" { #endif /* Extended FSL macros. These now replace all of the previous FSL macros */ -#define FSL_DEFAULT +#define FSL_DEFAULT #define FSL_NONBLOCKING n #define FSL_EXCEPTION e #define FSL_CONTROL c @@ -44,5 +44,4 @@ extern "C" { #ifdef __cplusplus } #endif -#endif /* _FSL_H */ - +#endif /* FSL_H */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/hw_exception_handler.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/hw_exception_handler.S similarity index 68% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/hw_exception_handler.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/hw_exception_handler.S index 12bbf2c6c..7db0afd65 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/hw_exception_handler.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/hw_exception_handler.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,7 +29,7 @@ * this Software without prior written authorization from Xilinx. * ******************************************************************************/ -/* +/****************************************************************************** * Microblaze HW Exception Handler * - Non self-modifying exception handler for the following exception conditions * - Unalignment @@ -38,7 +38,7 @@ * - Illegal instruction opcode * - Divide-by-zero * - Stack protection violation - */ + *******************************************************************************/ #include "microblaze_exceptions_g.h" #include "xparameters.h" @@ -46,129 +46,129 @@ /* Helpful Macros */ #define EX_HANDLER_STACK_SIZ (4*21) #define RMSR_OFFSET (20 * 4) -#define R17_OFFSET (0) +#define R17_OFFSET (0) #define REG_OFFSET(regnum) (4 * (regnum + 1)) #define NUM_TO_REG(num) r ## num #define R3_TO_STACK(regnum) swi r3, r1, REG_OFFSET(regnum) -#define R3_FROM_STACK(regnum) lwi r3, r1, REG_OFFSET(regnum) +#define R3_FROM_STACK(regnum) lwi r3, r1, REG_OFFSET(regnum) #define PUSH_REG(regnum) swi NUM_TO_REG(regnum), r1, REG_OFFSET(regnum) #define POP_REG(regnum) lwi NUM_TO_REG(regnum), r1, REG_OFFSET(regnum) - + /* Uses r5 */ #define PUSH_MSR \ mfs r5, rmsr; \ swi r5, r1, RMSR_OFFSET; - + #define PUSH_MSR_AND_ENABLE_EXC \ mfs r5, rmsr; \ swi r5, r1, RMSR_OFFSET; \ ori r5, r5, 0x100; /* Turn ON the EE bit*/ \ mts rmsr, r5; - + /* Uses r5 */ #define POP_MSR \ lwi r5, r1, RMSR_OFFSET; \ - mts rmsr, r5; + mts rmsr, r5; -/* Push r17 */ +/* Push r17 */ #define PUSH_R17 swi r17, r1, R17_OFFSET -/* Pop r17 */ +/* Pop r17 */ #define POP_R17 lwi r17, r1, R17_OFFSET - + #define LWREG_NOP \ bri ex_handler_unhandled; \ nop; #define SWREG_NOP \ bri ex_handler_unhandled; \ - nop; - + nop; + /* r3 is the source */ #define R3_TO_LWREG_V(regnum) \ R3_TO_STACK (regnum); \ - bri ex_handler_done; + bri ex_handler_done; /* r3 is the source */ #define R3_TO_LWREG(regnum) \ or NUM_TO_REG (regnum), r0, r3; \ - bri ex_handler_done; + bri ex_handler_done; -/* r3 is the target */ +/* r3 is the target */ #define SWREG_TO_R3_V(regnum) \ R3_FROM_STACK (regnum); \ - bri ex_sw_tail; - -/* r3 is the target */ + bri ex_sw_tail; + +/* r3 is the target */ #define SWREG_TO_R3(regnum) \ or r3, r0, NUM_TO_REG (regnum); \ - bri ex_sw_tail; + bri ex_sw_tail; -/* regnum is the source */ +/* regnum is the source */ #define FP_EX_OPB_SAVE(regnum) \ swi NUM_TO_REG (regnum), r0, mb_fpex_op_b; \ nop; \ - bri handle_fp_ex_opa; + bri handle_fp_ex_opa; -/* regnum is the source */ +/* regnum is the source */ #define FP_EX_OPB_SAVE_V(regnum) \ R3_FROM_STACK (regnum); \ swi r3, r0, mb_fpex_op_b; \ - bri handle_fp_ex_opa; - -/* regnum is the source */ + bri handle_fp_ex_opa; + +/* regnum is the source */ #define FP_EX_OPA_SAVE(regnum) \ swi NUM_TO_REG (regnum), r0, mb_fpex_op_a; \ nop; \ - bri handle_fp_ex_done; - -/* regnum is the source */ + bri handle_fp_ex_done; + +/* regnum is the source */ #define FP_EX_OPA_SAVE_V(regnum) \ R3_FROM_STACK (regnum); \ swi r3, r0, mb_fpex_op_a; \ - bri handle_fp_ex_done; + bri handle_fp_ex_done; #define FP_EX_UNHANDLED \ bri fp_ex_unhandled; \ nop; \ nop; -/* ESR masks */ +/* ESR masks */ #define ESR_EXC_MASK 0x0000001F #define ESR_REG_MASK 0x000003E0 #define ESR_LW_SW_MASK 0x00000400 #define ESR_WORD_MASK 0x00000800 #define ESR_DS_MASK 0x00001000 - + /* Extern declarations */ .extern XNullHandler #ifdef MICROBLAZE_EXCEPTIONS_ENABLED /* If exceptions are enabled in the processor */ - -/* + +/* * hw_exception_handler - Handler for unaligned exceptions - * Exception handler notes: + * Exception handler notes: * - Does not handle exceptions other than unaligned exceptions * - Does not handle exceptions during load into r17, r1, r0. * - Does not handle exceptions during store from r17 (cannot be done) and r1 (slows down common case) * * Relevant register structures - * - * EAR - |----|----|----|----|----|----|----|----| - * - < ## 32 bit faulting address ## > - * - * ESR - |----|----|----|----|----| - | - |-----|-----| + * + * EAR - |----|----|----|----|----|----|----|----| + * - < ## 32 bit faulting address ## > + * + * ESR - |----|----|----|----|----| - | - |-----|-----| * - W S REG EXC * - * + * * STACK FRAME STRUCTURE * --------------------- * * +-------------+ + 0 * | r17 | - * +-------------+ + 4 + * +-------------+ + 4 * | Args for | * | next func | * +-------------+ + 8 @@ -179,19 +179,19 @@ * | . | * | r18 | * +-------------+ + 80 - * | MSR | - * +-------------+ + 84 - * | . | - * | . | - */ - - -.global _hw_exception_handler -.section .text + * | MSR | + * +-------------+ + 84 + * | . | + * | . | + */ + + +.global _hw_exception_handler +.section .text .align 2 .ent _hw_exception_handler -.type _hw_exception_handler, @function -_hw_exception_handler: +.type _hw_exception_handler, @function +_hw_exception_handler: #if defined(XPAR_MICROBLAZE_USE_STACK_PROTECTION) && (XPAR_MICROBLAZE_USE_STACK_PROTECTION == 1) /* Immediately halt for stack protection violation exception without using any stack */ @@ -207,33 +207,33 @@ ex_handler_not_sp_violation: #endif /* defined(XPAR_MICROBLAZE_USE_STACK_PROTECTION) && (XPAR_MICROBLAZE_USE_STACK_PROTECTION == 1) */ addik r1, r1, -(EX_HANDLER_STACK_SIZ); /* Create stack frame */ - PUSH_REG(3); - PUSH_REG(4); - PUSH_REG(5); + PUSH_REG(3); + PUSH_REG(4); + PUSH_REG(5); PUSH_REG(6); #ifdef MICROBLAZE_CAN_HANDLE_EXCEPTIONS_IN_DELAY_SLOTS mfs r6, resr; andi r6, r6, ESR_DS_MASK; beqi r6, ex_handler_no_ds; mfs r17, rbtr; -ex_handler_no_ds: +ex_handler_no_ds: #endif - PUSH_R17; + PUSH_R17; PUSH_MSR_AND_ENABLE_EXC; /* Exceptions enabled here. This will allow nested exceptions */ - - mfs r3, resr; + + mfs r3, resr; andi r5, r3, ESR_EXC_MASK; /* Extract ESR[EXC] */ #ifndef NO_UNALIGNED_EXCEPTIONS - xori r6, r5, 1; /* 00001 = Unaligned Exception */ - bnei r6, handle_ex_regular; + xori r6, r5, 1; /* 00001 = Unaligned Exception */ + bnei r6, handle_ex_regular; la r4, r0, MB_ExceptionVectorTable; /* Check if user has registered an unaligned exception handler */ - lwi r4, r4, 8; + lwi r4, r4, 8; la r6, r0, XNullHandler; /* If exceptionvectortable entry is still XNullHandler, use */ xor r6, r4, r6; /* the default exception handler */ - beqi r6, handle_unaligned_ex ; - -handle_ex_regular: + beqi r6, handle_unaligned_ex ; + +handle_ex_regular: #endif /* ! NO_UNALIGNED_EXCEPTIONS */ #if defined (MICROBLAZE_FP_EXCEPTION_ENABLED) && defined (MICROBLAZE_FP_EXCEPTION_DECODE) @@ -241,29 +241,29 @@ handle_ex_regular: beqi r6, handle_fp_ex; /* Go and decode the FP exception */ #endif /* defined (MICROBLAZE_FP_EXCEPTION_ENABLED) && defined (MICROBLAZE_FP_EXCEPTION_DECODE) */ -handle_other_ex: /* Handle Other exceptions here */ - ori r6, r0, 20; +handle_other_ex: /* Handle Other exceptions here */ + ori r6, r0, 20; cmp r6, r5, r6; /* >= 20 are exceptions we do not handle. */ blei r6, ex_handler_unhandled; ori r6, r0, 7; cmp r6, r5, r6; /* Convert MMU exception indices into an ordinal of 7 */ bgti r6, handle_other_ex_tail; - ori r5, r0, 0x7; - -handle_other_ex_tail: + ori r5, r0, 0x7; + +handle_other_ex_tail: PUSH_REG(7); /* Save other volatiles before we make procedure calls below */ - PUSH_REG(8); - PUSH_REG(9); - PUSH_REG(10); - PUSH_REG(11); + PUSH_REG(8); + PUSH_REG(9); + PUSH_REG(10); + PUSH_REG(11); PUSH_REG(12); PUSH_REG(15); - PUSH_REG(18); + PUSH_REG(18); la r4, r0, MB_ExceptionVectorTable; /* Load the Exception vector table base address */ addk r7, r5, r5; /* Calculate exception vector offset = r5 * 8 */ - addk r7, r7, r7; + addk r7, r7, r7; addk r7, r7, r7; addk r7, r7, r4; /* Get pointer to exception vector */ lwi r5, r7, 4; /* Load argument to exception handler from table */ @@ -271,20 +271,20 @@ handle_other_ex_tail: brald r15, r7; /* Branch to handler */ nop; - + POP_REG(7); /* Restore other volatiles */ - POP_REG(8); - POP_REG(9); - POP_REG(10); - POP_REG(11); + POP_REG(8); + POP_REG(9); + POP_REG(10); + POP_REG(11); POP_REG(12); POP_REG(15); - POP_REG(18); + POP_REG(18); - bri ex_handler_done; /* Complete exception handling */ + bri ex_handler_done; /* Complete exception handling */ #ifndef NO_UNALIGNED_EXCEPTIONS -handle_unaligned_ex: +handle_unaligned_ex: andi r6, r3, ESR_REG_MASK; /* Mask and extract the register operand */ srl r6, r6; /* r6 >> 5 */ srl r6, r6; @@ -292,14 +292,14 @@ handle_unaligned_ex: srl r6, r6; srl r6, r6; sbi r6, r0, ex_reg_op; /* Store the register operand in a temporary location */ - mfs r4, rear; + mfs r4, rear; andi r6, r3, ESR_LW_SW_MASK; /* Extract ESR[S] */ bnei r6, ex_sw; -ex_lw: +ex_lw: andi r6, r3, ESR_WORD_MASK; /* Extract ESR[W] */ beqi r6, ex_lhw; lbui r5, r4, 0; /* Exception address in r4 */ - sbi r5, r0, ex_tmp_data_loc_0; /* Load a word, byte-by-byte from destination address and save it in tmp space */ + sbi r5, r0, ex_tmp_data_loc_0; /* Load a word, byte-by-byte from destination address and save it in tmp space */ lbui r5, r4, 1; sbi r5, r0, ex_tmp_data_loc_1; lbui r5, r4, 2; @@ -307,32 +307,32 @@ ex_lw: lbui r5, r4, 3; sbi r5, r0, ex_tmp_data_loc_3; lwi r3, r0, ex_tmp_data_loc_0; /* Get the destination register value into r3 */ - bri ex_lw_tail; -ex_lhw: + bri ex_lw_tail; +ex_lhw: lbui r5, r4, 0; /* Exception address in r4 */ - sbi r5, r0, ex_tmp_data_loc_0; /* Load a half-word, byte-by-byte from destination address and save it in tmp space */ - lbui r5, r4, 1; + sbi r5, r0, ex_tmp_data_loc_0; /* Load a half-word, byte-by-byte from destination address and save it in tmp space */ + lbui r5, r4, 1; sbi r5, r0, ex_tmp_data_loc_1; lhui r3, r0, ex_tmp_data_loc_0; /* Get the destination register value into r3 */ ex_lw_tail: lbui r5, r0, ex_reg_op; /* Get the destination register number into r5 */ la r6, r0, lw_table; /* Form load_word jump table offset (lw_table + (8 * regnum)) */ - addk r5, r5, r5; + addk r5, r5, r5; addk r5, r5, r5; addk r5, r5, r5; addk r5, r5, r6; bra r5; ex_lw_end: /* Exception handling of load word, ends */ -ex_sw: +ex_sw: lbui r5, r0, ex_reg_op; /* Get the destination register number into r5 */ la r6, r0, sw_table; /* Form store_word jump table offset (sw_table + (8 * regnum)) */ - add r5, r5, r5; + add r5, r5, r5; add r5, r5, r5; add r5, r5, r5; add r5, r5, r6; bra r5; -ex_sw_tail: - mfs r6, resr; +ex_sw_tail: + mfs r6, resr; andi r6, r6, ESR_WORD_MASK; /* Extract ESR[W] */ beqi r6, ex_shw; swi r3, r0, ex_tmp_data_loc_0; @@ -341,13 +341,13 @@ ex_sw_tail: lbui r3, r0, ex_tmp_data_loc_1; sbi r3, r4, 1; lbui r3, r0, ex_tmp_data_loc_2; - sbi r3, r4, 2; + sbi r3, r4, 2; lbui r3, r0, ex_tmp_data_loc_3; - sbi r3, r4, 3; + sbi r3, r4, 3; bri ex_handler_done; -ex_shw: +ex_shw: swi r3, r0, ex_tmp_data_loc_0; /* Store the lower half-word, byte-by-byte into destination address */ - + #ifdef __LITTLE_ENDIAN__ lbui r3, r0, ex_tmp_data_loc_0; #else @@ -361,7 +361,7 @@ ex_shw: #endif sbi r3, r4, 1; ex_sw_end: /* Exception handling of store word, ends. */ - bri ex_handler_done; + bri ex_handler_done; #endif /* !NO_UNALIGNED_EXCEPTIONS */ #if defined (MICROBLAZE_FP_EXCEPTION_ENABLED) && defined (MICROBLAZE_FP_EXCEPTION_DECODE) @@ -371,76 +371,76 @@ handle_fp_ex: handle_fp_ex_opb: la r6, r0, fp_table_opb; /* Decode opB and store its value in mb_fpex_op_b */ - srl r4, r4; - srl r4, r4; - srl r4, r4; - srl r4, r4; - srl r4, r4; - srl r4, r4; - srl r4, r4; - srl r4, r4; - srl r4, r4; - srl r4, r4; - srl r4, r4; + srl r4, r4; + srl r4, r4; + srl r4, r4; + srl r4, r4; + srl r4, r4; + srl r4, r4; + srl r4, r4; + srl r4, r4; + srl r4, r4; + srl r4, r4; + srl r4, r4; andi r3, r4, 0x1F; add r3, r3, r3; /* Calculate (fp_table_opb + (regno * 12)) in r5 */ add r3, r3, r3; add r5, r3, r3; add r5, r5, r3; add r5, r5, r6; - bra r5; + bra r5; handle_fp_ex_opa: la r6, r0, fp_table_opa; /* Decode opA and store its value in mb_fpex_op_a */ - srl r4, r4; - srl r4, r4; - srl r4, r4; - srl r4, r4; - srl r4, r4; + srl r4, r4; + srl r4, r4; + srl r4, r4; + srl r4, r4; + srl r4, r4; andi r3, r4, 0x1F; add r3, r3, r3; /* Calculate (fp_table_opb + (regno * 12)) in r5 */ add r3, r3, r3; add r5, r3, r3; add r5, r5, r3; add r5, r5, r6; - bra r5; + bra r5; handle_fp_ex_done: ori r5, r0, 6; /* Set exception number back to 6 */ - bri handle_other_ex_tail; - -fp_ex_unhandled: - bri 0; + bri handle_other_ex_tail; + +fp_ex_unhandled: + bri 0; #endif /* defined (MICROBLAZE_FP_EXCEPTION_ENABLED) && defined (MICROBLAZE_FP_EXCEPTION_DECODE) */ - + ex_handler_done: POP_R17; POP_MSR; - POP_REG(3); - POP_REG(4); - POP_REG(5); - POP_REG(6); + POP_REG(3); + POP_REG(4); + POP_REG(5); + POP_REG(6); rted r17, 0 - addik r1, r1, (EX_HANDLER_STACK_SIZ); /* Restore stack frame */ -ex_handler_unhandled: - bri 0 /* UNHANDLED. TRAP HERE */ -.end _hw_exception_handler + addik r1, r1, (EX_HANDLER_STACK_SIZ); /* Restore stack frame */ +ex_handler_unhandled: + bri 0 /* UNHANDLED. TRAP HERE */ +.end _hw_exception_handler -#ifndef NO_UNALIGNED_EXCEPTIONS +#ifndef NO_UNALIGNED_EXCEPTIONS -/* +/* * hw_exception_handler Jump Table * - Contains code snippets for each register that caused the unaligned exception. * - Hence exception handler is NOT self-modifying * - Separate table for load exceptions and store exceptions. * - Each table is of size: (8 * 32) = 256 bytes */ - + .section .text .align 4 lw_table: -lw_r0: R3_TO_LWREG (0); +lw_r0: R3_TO_LWREG (0); lw_r1: LWREG_NOP; lw_r2: R3_TO_LWREG (2); lw_r3: R3_TO_LWREG_V (3); @@ -451,30 +451,30 @@ lw_r7: R3_TO_LWREG (7); lw_r8: R3_TO_LWREG (8); lw_r9: R3_TO_LWREG (9); lw_r10: R3_TO_LWREG (10); -lw_r11: R3_TO_LWREG (11); +lw_r11: R3_TO_LWREG (11); lw_r12: R3_TO_LWREG (12); lw_r13: R3_TO_LWREG (13); -lw_r14: R3_TO_LWREG (14); -lw_r15: R3_TO_LWREG (15); -lw_r16: R3_TO_LWREG (16); +lw_r14: R3_TO_LWREG (14); +lw_r15: R3_TO_LWREG (15); +lw_r16: R3_TO_LWREG (16); lw_r17: LWREG_NOP; -lw_r18: R3_TO_LWREG (18); -lw_r19: R3_TO_LWREG (19); -lw_r20: R3_TO_LWREG (20); +lw_r18: R3_TO_LWREG (18); +lw_r19: R3_TO_LWREG (19); +lw_r20: R3_TO_LWREG (20); lw_r21: R3_TO_LWREG (21); lw_r22: R3_TO_LWREG (22); -lw_r23: R3_TO_LWREG (23); -lw_r24: R3_TO_LWREG (24); -lw_r25: R3_TO_LWREG (25); -lw_r26: R3_TO_LWREG (26); -lw_r27: R3_TO_LWREG (27); -lw_r28: R3_TO_LWREG (28); -lw_r29: R3_TO_LWREG (29); +lw_r23: R3_TO_LWREG (23); +lw_r24: R3_TO_LWREG (24); +lw_r25: R3_TO_LWREG (25); +lw_r26: R3_TO_LWREG (26); +lw_r27: R3_TO_LWREG (27); +lw_r28: R3_TO_LWREG (28); +lw_r29: R3_TO_LWREG (29); lw_r30: R3_TO_LWREG (30); lw_r31: R3_TO_LWREG (31); sw_table: -sw_r0: SWREG_TO_R3 (0); +sw_r0: SWREG_TO_R3 (0); sw_r1: SWREG_NOP; sw_r2: SWREG_TO_R3 (2); sw_r3: SWREG_TO_R3_V (3); @@ -485,128 +485,128 @@ sw_r7: SWREG_TO_R3 (7); sw_r8: SWREG_TO_R3 (8); sw_r9: SWREG_TO_R3 (9); sw_r10: SWREG_TO_R3 (10); -sw_r11: SWREG_TO_R3 (11); +sw_r11: SWREG_TO_R3 (11); sw_r12: SWREG_TO_R3 (12); sw_r13: SWREG_TO_R3 (13); -sw_r14: SWREG_TO_R3 (14); -sw_r15: SWREG_TO_R3 (15); -sw_r16: SWREG_TO_R3 (16); -sw_r17: SWREG_NOP; -sw_r18: SWREG_TO_R3 (18); -sw_r19: SWREG_TO_R3 (19); -sw_r20: SWREG_TO_R3 (20); +sw_r14: SWREG_TO_R3 (14); +sw_r15: SWREG_TO_R3 (15); +sw_r16: SWREG_TO_R3 (16); +sw_r17: SWREG_NOP; +sw_r18: SWREG_TO_R3 (18); +sw_r19: SWREG_TO_R3 (19); +sw_r20: SWREG_TO_R3 (20); sw_r21: SWREG_TO_R3 (21); sw_r22: SWREG_TO_R3 (22); -sw_r23: SWREG_TO_R3 (23); -sw_r24: SWREG_TO_R3 (24); -sw_r25: SWREG_TO_R3 (25); -sw_r26: SWREG_TO_R3 (26); -sw_r27: SWREG_TO_R3 (27); -sw_r28: SWREG_TO_R3 (28); -sw_r29: SWREG_TO_R3 (29); +sw_r23: SWREG_TO_R3 (23); +sw_r24: SWREG_TO_R3 (24); +sw_r25: SWREG_TO_R3 (25); +sw_r26: SWREG_TO_R3 (26); +sw_r27: SWREG_TO_R3 (27); +sw_r28: SWREG_TO_R3 (28); +sw_r29: SWREG_TO_R3 (29); sw_r30: SWREG_TO_R3 (30); sw_r31: SWREG_TO_R3 (31); /* Temporary data structures used in the handler */ .section .data .align 2 -ex_tmp_data_loc_0: +ex_tmp_data_loc_0: + .byte 0 +ex_tmp_data_loc_1: .byte 0 -ex_tmp_data_loc_1: +ex_tmp_data_loc_2: .byte 0 -ex_tmp_data_loc_2: +ex_tmp_data_loc_3: .byte 0 -ex_tmp_data_loc_3: - .byte 0 ex_reg_op: .byte 0 - + #endif /* ! NO_UNALIGNED_EXCEPTIONS */ - + #if defined (MICROBLAZE_FP_EXCEPTION_ENABLED) && defined (MICROBLAZE_FP_EXCEPTION_DECODE) -/* +/* * FP exception decode jump table. * - Contains code snippets for each register that could have been a source operand for an excepting FP instruction * - Hence exception handler is NOT self-modifying * - Separate table for opA and opB * - Each table is of size: (12 * 32) = 384 bytes */ - + .section .text .align 4 fp_table_opa: -opa_r0: FP_EX_OPA_SAVE (0); -opa_r1: FP_EX_UNHANDLED; -opa_r2: FP_EX_OPA_SAVE (2); -opa_r3: FP_EX_OPA_SAVE_V (3); -opa_r4: FP_EX_OPA_SAVE_V (4); -opa_r5: FP_EX_OPA_SAVE_V (5); -opa_r6: FP_EX_OPA_SAVE_V (6); -opa_r7: FP_EX_OPA_SAVE (7); -opa_r8: FP_EX_OPA_SAVE (8); -opa_r9: FP_EX_OPA_SAVE (9); -opa_r10: FP_EX_OPA_SAVE (10); -opa_r11: FP_EX_OPA_SAVE (11); -opa_r12: FP_EX_OPA_SAVE (12); -opa_r13: FP_EX_OPA_SAVE (13); -opa_r14: FP_EX_UNHANDLED; -opa_r15: FP_EX_UNHANDLED; -opa_r16: FP_EX_UNHANDLED; -opa_r17: FP_EX_UNHANDLED; -opa_r18: FP_EX_OPA_SAVE (18); -opa_r19: FP_EX_OPA_SAVE (19); -opa_r20: FP_EX_OPA_SAVE (20); -opa_r21: FP_EX_OPA_SAVE (21); -opa_r22: FP_EX_OPA_SAVE (22); -opa_r23: FP_EX_OPA_SAVE (23); -opa_r24: FP_EX_OPA_SAVE (24); -opa_r25: FP_EX_OPA_SAVE (25); -opa_r26: FP_EX_OPA_SAVE (26); -opa_r27: FP_EX_OPA_SAVE (27); -opa_r28: FP_EX_OPA_SAVE (28); -opa_r29: FP_EX_OPA_SAVE (29); -opa_r30: FP_EX_OPA_SAVE (30); -opa_r31: FP_EX_OPA_SAVE (31); - -fp_table_opb: -opb_r0: FP_EX_OPB_SAVE (0); -opb_r1: FP_EX_UNHANDLED; -opb_r2: FP_EX_OPB_SAVE (2); -opb_r3: FP_EX_OPB_SAVE_V (3); -opb_r4: FP_EX_OPB_SAVE_V (4); -opb_r5: FP_EX_OPB_SAVE_V (5); -opb_r6: FP_EX_OPB_SAVE_V (6); -opb_r7: FP_EX_OPB_SAVE (7); -opb_r8: FP_EX_OPB_SAVE (8); -opb_r9: FP_EX_OPB_SAVE (9); -opb_r10: FP_EX_OPB_SAVE (10); -opb_r11: FP_EX_OPB_SAVE (11); -opb_r12: FP_EX_OPB_SAVE (12); -opb_r13: FP_EX_OPB_SAVE (13); -opb_r14: FP_EX_UNHANDLED; -opb_r15: FP_EX_UNHANDLED; -opb_r16: FP_EX_UNHANDLED; -opb_r17: FP_EX_UNHANDLED; -opb_r18: FP_EX_OPB_SAVE (18); -opb_r19: FP_EX_OPB_SAVE (19); -opb_r20: FP_EX_OPB_SAVE (20); -opb_r21: FP_EX_OPB_SAVE (21); -opb_r22: FP_EX_OPB_SAVE (22); -opb_r23: FP_EX_OPB_SAVE (23); -opb_r24: FP_EX_OPB_SAVE (24); -opb_r25: FP_EX_OPB_SAVE (25); -opb_r26: FP_EX_OPB_SAVE (26); -opb_r27: FP_EX_OPB_SAVE (27); -opb_r28: FP_EX_OPB_SAVE (28); -opb_r29: FP_EX_OPB_SAVE (29); -opb_r30: FP_EX_OPB_SAVE (30); -opb_r31: FP_EX_OPB_SAVE (31); - +opa_r0: FP_EX_OPA_SAVE (0); +opa_r1: FP_EX_UNHANDLED; +opa_r2: FP_EX_OPA_SAVE (2); +opa_r3: FP_EX_OPA_SAVE_V (3); +opa_r4: FP_EX_OPA_SAVE_V (4); +opa_r5: FP_EX_OPA_SAVE_V (5); +opa_r6: FP_EX_OPA_SAVE_V (6); +opa_r7: FP_EX_OPA_SAVE (7); +opa_r8: FP_EX_OPA_SAVE (8); +opa_r9: FP_EX_OPA_SAVE (9); +opa_r10: FP_EX_OPA_SAVE (10); +opa_r11: FP_EX_OPA_SAVE (11); +opa_r12: FP_EX_OPA_SAVE (12); +opa_r13: FP_EX_OPA_SAVE (13); +opa_r14: FP_EX_UNHANDLED; +opa_r15: FP_EX_UNHANDLED; +opa_r16: FP_EX_UNHANDLED; +opa_r17: FP_EX_UNHANDLED; +opa_r18: FP_EX_OPA_SAVE (18); +opa_r19: FP_EX_OPA_SAVE (19); +opa_r20: FP_EX_OPA_SAVE (20); +opa_r21: FP_EX_OPA_SAVE (21); +opa_r22: FP_EX_OPA_SAVE (22); +opa_r23: FP_EX_OPA_SAVE (23); +opa_r24: FP_EX_OPA_SAVE (24); +opa_r25: FP_EX_OPA_SAVE (25); +opa_r26: FP_EX_OPA_SAVE (26); +opa_r27: FP_EX_OPA_SAVE (27); +opa_r28: FP_EX_OPA_SAVE (28); +opa_r29: FP_EX_OPA_SAVE (29); +opa_r30: FP_EX_OPA_SAVE (30); +opa_r31: FP_EX_OPA_SAVE (31); + +fp_table_opb: +opb_r0: FP_EX_OPB_SAVE (0); +opb_r1: FP_EX_UNHANDLED; +opb_r2: FP_EX_OPB_SAVE (2); +opb_r3: FP_EX_OPB_SAVE_V (3); +opb_r4: FP_EX_OPB_SAVE_V (4); +opb_r5: FP_EX_OPB_SAVE_V (5); +opb_r6: FP_EX_OPB_SAVE_V (6); +opb_r7: FP_EX_OPB_SAVE (7); +opb_r8: FP_EX_OPB_SAVE (8); +opb_r9: FP_EX_OPB_SAVE (9); +opb_r10: FP_EX_OPB_SAVE (10); +opb_r11: FP_EX_OPB_SAVE (11); +opb_r12: FP_EX_OPB_SAVE (12); +opb_r13: FP_EX_OPB_SAVE (13); +opb_r14: FP_EX_UNHANDLED; +opb_r15: FP_EX_UNHANDLED; +opb_r16: FP_EX_UNHANDLED; +opb_r17: FP_EX_UNHANDLED; +opb_r18: FP_EX_OPB_SAVE (18); +opb_r19: FP_EX_OPB_SAVE (19); +opb_r20: FP_EX_OPB_SAVE (20); +opb_r21: FP_EX_OPB_SAVE (21); +opb_r22: FP_EX_OPB_SAVE (22); +opb_r23: FP_EX_OPB_SAVE (23); +opb_r24: FP_EX_OPB_SAVE (24); +opb_r25: FP_EX_OPB_SAVE (25); +opb_r26: FP_EX_OPB_SAVE (26); +opb_r27: FP_EX_OPB_SAVE (27); +opb_r28: FP_EX_OPB_SAVE (28); +opb_r29: FP_EX_OPB_SAVE (29); +opb_r30: FP_EX_OPB_SAVE (30); +opb_r31: FP_EX_OPB_SAVE (31); + #endif /* defined (MICROBLAZE_FP_EXCEPTION_ENABLED) && defined (MICROBLAZE_FP_EXCEPTION_DECODE) */ - + #if defined(MICROBLAZE_FP_EXCEPTION_ENABLED) && defined(MICROBLAZE_FP_EXCEPTION_DECODE) /* This is where we store the opA and opB of the last excepting FP instruction */ -.section .data +.section .data .align 2 .global mb_fpex_op_a .global mb_fpex_op_b @@ -644,19 +644,16 @@ MB_ExceptionVectorTable: .long XNullHandler .long 6 /* -- FPU Exception -- */ .long XNullHandler - .long 7 /* -- MMU Exceptions -- */ + .long 7 /* -- MMU Exceptions -- */ #else /* Dummy exception handler, in case exceptions are not present in the processor */ -.global _hw_exception_handler -.section .text +.global _hw_exception_handler +.section .text .align 2 .ent _hw_exception_handler _hw_exception_handler: - bri 0; -.end _hw_exception_handler - -#endif /* MICROBLAZE_EXCEPTIONS_ENABLED */ - - + bri 0; +.end _hw_exception_handler +#endif /* MICROBLAZE_EXCEPTIONS_ENABLED */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/inbyte.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/inbyte.c new file mode 100644 index 000000000..b75a2376f --- /dev/null +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/inbyte.c @@ -0,0 +1,14 @@ +#include "xparameters.h" +#include "xuartlite_l.h" + +#ifdef __cplusplus +extern "C" { +#endif +char inbyte(void); +#ifdef __cplusplus +} +#endif + +char inbyte(void) { + return XUartLite_RecvByte(STDIN_BASEADDRESS); +} diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/mb_interface.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/mb_interface.h similarity index 80% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/mb_interface.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/mb_interface.h index 33cd25dac..77005880a 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/mb_interface.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/mb_interface.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2004 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -54,22 +54,22 @@ extern void microblaze_register_exception_handler(u32 ExceptionId, Xil_Exception extern void microblaze_invalidate_icache(void); /* Invalidate the entire icache */ extern void microblaze_invalidate_dcache(void); /* Invalidate the entire dcache */ extern void microblaze_flush_dcache(void); /* Flush the whole dcache */ -extern void microblaze_invalidate_icache_range(unsigned int cacheaddr, unsigned int len); /* Invalidate a part of the icache */ -extern void microblaze_invalidate_dcache_range(unsigned int cacheaddr, unsigned int len); /* Invalidate a part of the dcache */ -extern void microblaze_flush_dcache_range(unsigned int cacheaddr, unsigned int len); /* Flush a part of the dcache */ +extern void microblaze_invalidate_icache_range(u32 cacheaddr, u32 len); /* Invalidate a part of the icache */ +extern void microblaze_invalidate_dcache_range(u32 cacheaddr, u32 len); /* Invalidate a part of the dcache */ +extern void microblaze_flush_dcache_range(u32 cacheaddr, u32 len); /* Flush a part of the dcache */ extern void microblaze_scrub(void); /* Scrub LMB and internal BRAM */ extern void microblaze_invalidate_cache_ext(void); /* Invalidate cache ext */ extern void microblaze_flush_cache_ext(void); /* Flush cache ext */ -extern void microblaze_flush_cache_ext_range(unsigned int cacheaddr, - unsigned int len); /* Flush cache ext range */ -extern void microblaze_invalidate_cache_ext_range(unsigned int cacheaddr, - unsigned int len); /* Invalidate cache ext range */ +extern void microblaze_flush_cache_ext_range(u32 cacheaddr, + u32 len); /* Flush cache ext range */ +extern void microblaze_invalidate_cache_ext_range(u32 cacheaddr, + u32 len); /* Invalidate cache ext range */ /* Deprecated */ -extern void microblaze_update_icache (int , int , int ) __attribute__((deprecated)); -extern void microblaze_init_icache_range (int , int ) __attribute__((deprecated)); -extern void microblaze_update_dcache (int , int , int ) __attribute__((deprecated)); -extern void microblaze_init_dcache_range (int , int ) __attribute__((deprecated)); +extern void microblaze_update_icache (s32 , s32 , s32 ) __attribute__((deprecated)); +extern void microblaze_init_icache_range (s32 , s32 ) __attribute__((deprecated)); +extern void microblaze_update_dcache (s32 , s32 , s32 ) __attribute__((deprecated)); +extern void microblaze_init_dcache_range (s32 , s32 ) __attribute__((deprecated)); /* necessary for pre-processor */ #define stringify(s) tostring(s) @@ -119,7 +119,7 @@ extern void microblaze_init_dcache_range (int , int ) __attribute__((deprecated "andi\t%0,%0,0x10" : "=d" (error)) /* Pseudo assembler instructions */ -#define clz(v) ({ unsigned int _rval; \ +#define clz(v) ({ u32 _rval; \ __asm__ __volatile__ ( \ "clz\t%0,%1\n" : "=d"(_rval): "d" (v) \ ); \ @@ -129,119 +129,133 @@ extern void microblaze_init_dcache_range (int , int ) __attribute__((deprecated #define mbar(mask) ({ __asm__ __volatile__ ("mbar\t" stringify(mask) ); }) #define mb_sleep() ({ __asm__ __volatile__ ("sleep\t"); }) -#define mb_swapb(v) ({ unsigned int _rval; \ +#define mb_swapb(v) ({ u32 _rval; \ __asm__ __volatile__ ( \ "swapb\t%0,%1\n" : "=d"(_rval) : "d" (v) \ ); \ _rval; \ }) -#define mb_swaph(v) ({ unsigned int _rval; \ +#define mb_swaph(v) ({ u32 _rval; \ __asm__ __volatile__ ( \ "swaph\t%0,%1\n" : "=d"(_rval) : "d" (v) \ ); \ _rval; \ }) -#define mfgpr(rn) ({ unsigned int _rval; \ +#define mfgpr(rn) ({ u32 _rval; \ __asm__ __volatile__ ( \ "or\t%0,r0," stringify(rn) "\n" : "=d"(_rval) \ ); \ _rval; \ }) -#define mfmsr() ({ unsigned int _rval; \ +#define mfmsr() ({ u32 _rval; \ __asm__ __volatile__ ( \ "mfs\t%0,rmsr\n" : "=d"(_rval) \ ); \ _rval; \ }) -#define mfear() ({ unsigned int _rval; \ +#define mfear() ({ u32 _rval; \ __asm__ __volatile__ ( \ "mfs\t%0,rear\n" : "=d"(_rval) \ ); \ _rval; \ }) -#define mfesr() ({ unsigned int _rval; \ +#define mfeare() ({ u32 _rval; \ + __asm__ __volatile__ ( \ + "mfse\t%0,rear\n" : "=d"(_rval) \ + ); \ + _rval; \ + }) + +#define mfesr() ({ u32 _rval; \ __asm__ __volatile__ ( \ "mfs\t%0,resr\n" : "=d"(_rval) \ ); \ _rval; \ }) -#define mffsr() ({ unsigned int _rval; \ +#define mffsr() ({ u32 _rval; \ __asm__ __volatile__ ( \ "mfs\t%0,rfsr\n" : "=d"(_rval) \ ); \ _rval; \ }) -#define mfpvr(rn) ({ unsigned int _rval; \ +#define mfpvr(rn) ({ u32 _rval; \ __asm__ __volatile__ ( \ "mfs\t%0,rpvr" stringify(rn) "\n" : "=d"(_rval) \ ); \ _rval; \ }) -#define mfbtr() ({ unsigned int _rval; \ +#define mfpvre(rn) ({ u32 _rval; \ + __asm__ __volatile__ ( \ + "mfse\t%0,rpvr" stringify(rn) "\n" : "=d"(_rval) \ + ); \ + _rval; \ + }) + +#define mfbtr() ({ u32 _rval; \ __asm__ __volatile__ ( \ "mfs\t%0,rbtr\n" : "=d"(_rval) \ ); \ _rval; \ }) -#define mfedr() ({ unsigned int _rval; \ +#define mfedr() ({ u32 _rval; \ __asm__ __volatile__ ( \ "mfs\t%0,redr\n" : "=d"(_rval) \ ); \ _rval; \ }) -#define mfpid() ({ unsigned int _rval; \ +#define mfpid() ({ u32 _rval; \ __asm__ __volatile__ ( \ "mfs\t%0,rpid\n" : "=d"(_rval)\ ); \ _rval; \ }) -#define mfzpr() ({ unsigned int _rval; \ +#define mfzpr() ({ u32 _rval; \ __asm__ __volatile__ ( \ "mfs\t%0,rzpr\n" : "=d"(_rval) \ ); \ _rval; \ }) -#define mftlbx() ({ unsigned int _rval; \ +#define mftlbx() ({ u32 _rval; \ __asm__ __volatile__ ( \ "mfs\t%0,rtlbx\n" : "=d"(_rval) \ ); \ _rval; \ }) -#define mftlblo() ({ unsigned int _rval; \ +#define mftlblo() ({ u32 _rval; \ __asm__ __volatile__ ( \ "mfs\t%0,rtlblo\n" : "=d"(_rval) \ ); \ _rval; \ }) -#define mftlbhi() ({ unsigned int _rval; \ +#define mftlbhi() ({ u32 _rval; \ __asm__ __volatile__ ( \ "mfs\t%0,rtlbhi\n" : "=d"(_rval) \ ); \ _rval; \ }) -#define mfslr() ({ unsigned int _rval; \ +#define mfslr() ({ u32 _rval; \ __asm__ __volatile__ ( \ "mfs\t%0,rslr\n" : "=d"(_rval) \ ); \ _rval; \ }) -#define mfshr() ({ unsigned int _rval; \ +#define mfshr() ({ u32 _rval; \ __asm__ __volatile__ ( \ "mfs\t%0,rshr\n" : "=d"(_rval) \ ); \ @@ -304,34 +318,56 @@ extern void microblaze_init_dcache_range (int , int ) __attribute__((deprecated ); \ }) -#define lwx(address) ({ unsigned int _rval; \ +#define lwx(address) ({ u32 _rval; \ __asm__ __volatile__ ( \ "lwx\t%0,%1,r0\n" : "=d"(_rval) : "d" (address) \ ); \ _rval; \ }) -#define lwr(address) ({ unsigned int _rval; \ +#define lwr(address) ({ u32 _rval; \ __asm__ __volatile__ ( \ "lwr\t%0,%1,r0\n" : "=d"(_rval) : "d" (address) \ ); \ _rval; \ }) -#define lhur(address) ({ unsigned int _rval; \ + +#define lwea(lladdr) ({ u32 _rval; \ + __asm__ __volatile__ ( \ + "lwea\t%0,%M1,%L1\n" : "=d"(_rval) : "d" (lladdr) \ + ); \ + _rval; \ + }) + +#define lhur(address) ({ u32 _rval; \ __asm__ __volatile__ ( \ "lhur\t%0,%1,r0\n" : "=d"(_rval) : "d" (address) \ ); \ _rval; \ }) -#define lbur(address) ({ unsigned int _rval; \ +#define lhuea(lladdr) ({ u32 _rval; \ + __asm__ __volatile__ ( \ + "lhuea\t%0,%M1,%L1\n" : "=d"(_rval) : "d" (lladdr) \ + ); \ + _rval; \ + }) + +#define lbur(address) ({ u32 _rval; \ __asm__ __volatile__ ( \ "lbur\t%0,%1,r0\n" : "=d"(_rval) : "d" (address) \ ); \ _rval; \ }) +#define lbuea(lladdr) ({ u32 _rval; \ + __asm__ __volatile__ ( \ + "lbuea\t%0,%M1,%L1\n" : "=d"(_rval) : "d" (lladdr) \ + ); \ + _rval; \ + }) + #define swx(address, data) ({ __asm__ __volatile__ ( \ "swx\t%0,%1,r0\n" :: "d" (data), "d" (address) \ ); \ @@ -342,23 +378,38 @@ extern void microblaze_init_dcache_range (int , int ) __attribute__((deprecated ); \ }) +#define swea(lladdr, data) ({ __asm__ __volatile__ ( \ + "swea\t%0,%M1,%L1\n" :: "d" (data), "d" (lladdr) \ + ); \ + }) + #define shr(address, data) ({ __asm__ __volatile__ ( \ "shr\t%0,%1,r0\n" :: "d" (data), "d" (address) \ ); \ }) +#define shea(lladdr, data) ({ __asm__ __volatile__ ( \ + "shea\t%0,%M1,%L1\n" :: "d" (data), "d" (lladdr) \ + ); \ + }) + #define sbr(address, data) ({ __asm__ __volatile__ ( \ "sbr\t%0,%1,r0\n" :: "d" (data), "d" (address) \ ); \ }) +#define sbea(lladdr, data) ({ __asm__ __volatile__ ( \ + "sbea\t%0,%M1,%L1\n" :: "d" (data), "d" (lladdr) \ + ); \ + }) + #define microblaze_getfpex_operand_a() ({ \ - extern unsigned int mb_fpex_op_a; \ + extern u32 mb_fpex_op_a; \ mb_fpex_op_a; \ }) #define microblaze_getfpex_operand_b() ({ \ - extern unsigned int mb_fpex_op_b; \ + extern u32 mb_fpex_op_b; \ mb_fpex_op_b; \ }) diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_i.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_disable_dcache.S similarity index 56% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_i.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_disable_dcache.S index a6f9bc559..af9d41bd0 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_i.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_disable_dcache.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,51 +29,56 @@ * this Software without prior written authorization from Xilinx. * ******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xtmrctr_i.h -* -* This file contains data which is shared between files internal to the -* XTmrCtr component. It is intended for internal use only. -* -*
-* MODIFICATION HISTORY:
+/******************************************************************************
+* File   : microblaze_disable_dcache.s
+* Date   : 2002, March 20.
+* Company: Xilinx
+* Group  : Emerging Software Technologies
 *
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00b jhl  02/06/02 First release
-* 1.10b mta  03/21/07 Updated to new coding style
-* 2.00a ktn  10/30/09 _m is removed from all the macro definitions.
-* 
+* Summary: +* Disable the L1 dcache on the microblaze. * -******************************************************************************/ - -#ifndef XTMRCTR_I_H /* prevent circular inclusions */ -#define XTMRCTR_I_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ - -#include "xil_types.h" +*******************************************************************************/ -/************************** Constant Definitions *****************************/ +#include "xparameters.h" + .text + .globl microblaze_disable_dcache + .ent microblaze_disable_dcache + .align 2 +microblaze_disable_dcache: +#if XPAR_MICROBLAZE_USE_MSR_INSTR == 1 -/************************** Function Prototypes ******************************/ +#if XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK != 0 + addik r1, r1, -4 + swi r15, r1, 0 + brlid r15, microblaze_flush_dcache /* microblaze_flush_dcache does not use r1*/ + nop + lwi r15, r1, 0 + addi r1, r1, 4 +#endif /* XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK != 0 */ + rtsd r15, 8 + msrclr r0, 0x80 +#else /* XPAR_MICROBLAZE_USE_MSR_INSTR == 1 */ -/************************** Variable Definitions *****************************/ + addik r1, r1, -4 -extern XTmrCtr_Config XTmrCtr_ConfigTable[]; +#if XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK != 0 + swi r15, r1, 0 + brlid r15, microblaze_flush_dcache + nop +#endif /* XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK != 0 */ + mfs r11, rmsr + andi r11, r11, ~(0x80) + mts rmsr, r11 -extern u8 XTmrCtr_Offsets[]; +#if XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK != 0 + lwi r15, r1, 0 +#endif /* XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK != 0 */ -#ifdef __cplusplus -} -#endif + rtsd r15, 8 + addi r1, r1, 4 -#endif +#endif /*XPAR_MICROBLAZE_USE_MSR_INSTR == 1*/ + .end microblaze_disable_dcache diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_disable_exceptions.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_disable_exceptions.S similarity index 90% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_disable_exceptions.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_disable_exceptions.S index e28a7db86..60efc72b9 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_disable_exceptions.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_disable_exceptions.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,11 +29,12 @@ * this Software without prior written authorization from Xilinx. * ******************************************************************************/ -# -# Disable exceptions on microblaze. -# -# -#################################################################### +/****************************************************************************** +* +* Disable exceptions on microblaze. +* +* +******************************************************************************/ #include "xparameters.h" @@ -45,14 +46,11 @@ microblaze_disable_exceptions: #if XPAR_MICROBLAZE_USE_MSR_INSTR == 1 rtsd r15, 8 msrclr r0, 0x100 -#else +#else mfs r4, rmsr; andi r4, r4, ~(0x100); /* Turn OFF the EE bit */ mts rmsr, r4; rtsd r15, 8; - nop; + nop; #endif .end microblaze_disable_exceptions - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_disable_icache.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_disable_icache.S similarity index 84% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_disable_icache.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_disable_icache.S index c5b5cf6e0..da946fc76 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_disable_icache.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_disable_icache.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,17 +29,18 @@ * this Software without prior written authorization from Xilinx. * ******************************************************************************/ -# -# File : microblaze_disable_icache.s -# Date : 2002, March 20. -# Company: Xilinx -# Group : Emerging Software Technologies -# -# Summary: -# Disable L1 icache on the microblaze. -# -# -#################################################################### +/****************************************************************************** +* +* File : microblaze_disable_icache.s +* Date : 2002, March 20. +* Company: Xilinx +* Group : Emerging Software Technologies +* +* Summary: +* Disable L1 icache on the microblaze. +* +* +******************************************************************************/ #include "xparameters.h" @@ -47,7 +48,7 @@ .globl microblaze_disable_icache .ent microblaze_disable_icache .align 2 -microblaze_disable_icache: +microblaze_disable_icache: #if XPAR_MICROBLAZE_USE_MSR_INSTR == 1 rtsd r15, 8 msrclr r0, 0x20 @@ -63,6 +64,3 @@ microblaze_disable_icache: nop #endif .end microblaze_disable_icache - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_disable_interrupts.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_disable_interrupts.S similarity index 84% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_disable_interrupts.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_disable_interrupts.S index ae28d9d87..08f6ecafe 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_disable_interrupts.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_disable_interrupts.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,17 +29,18 @@ * this Software without prior written authorization from Xilinx. * ******************************************************************************/ -# -# File : microblaze_disable_interrupts.s -# Date : 2002, March 20. -# Company: Xilinx -# Group : Emerging Software Technologies -# -# Summary: -# Disable interrupts on the microblaze. -# -# -#################################################################### +/****************************************************************************** +* +* File : microblaze_disable_interrupts.s +* Date : 2002, March 20. +* Company: Xilinx +* Group : Emerging Software Technologies +* +* Summary: +* Disable interrupts on the microblaze. +* +* +******************************************************************************/ #include "xparameters.h" @@ -47,7 +48,7 @@ .globl microblaze_disable_interrupts .ent microblaze_disable_interrupts .align 2 -microblaze_disable_interrupts: +microblaze_disable_interrupts: #if XPAR_MICROBLAZE_USE_MSR_INSTR == 1 rtsd r15, 8 msrclr r0, 0x2 @@ -63,6 +64,3 @@ microblaze_disable_interrupts: nop #endif /*XPAR_MICROBLAZE_USE_MSR_INSTR == 1*/ .end microblaze_disable_interrupts - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_enable_dcache.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_enable_dcache.S similarity index 84% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_enable_dcache.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_enable_dcache.S index 862fcdafa..cf0991e62 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_enable_dcache.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_enable_dcache.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,25 +29,26 @@ * this Software without prior written authorization from Xilinx. * ******************************************************************************/ -# -# File : microblaze_enable_dcache.s -# Date : 2002, March 20. -# Company: Xilinx -# Group : Emerging Software Technologies -# -# Summary: -# Enable L1 dcache on the microblaze. -# -# -#################################################################### +/****************************************************************************** +* +* File : microblaze_enable_dcache.s +* Date : 2002, March 20. +* Company: Xilinx +* Group : Emerging Software Technologies +* +* Summary: +* Enable L1 dcache on the microblaze. +* +* +******************************************************************************/ -#include "xparameters.h" +#include "xparameters.h" .text .globl microblaze_enable_dcache .ent microblaze_enable_dcache .align 2 -microblaze_enable_dcache: +microblaze_enable_dcache: #if XPAR_MICROBLAZE_USE_MSR_INSTR == 1 rtsd r15, 8 @@ -64,6 +65,3 @@ microblaze_enable_dcache: nop #endif /*XPAR_MICROBLAZE_USE_MSR_INSTR == 1*/ .end microblaze_enable_dcache - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_enable_exceptions.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_enable_exceptions.S similarity index 91% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_enable_exceptions.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_enable_exceptions.S index df298fc02..8e1ea080d 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_enable_exceptions.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_enable_exceptions.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,11 +29,12 @@ * this Software without prior written authorization from Xilinx. * ******************************************************************************/ -# -# Enable exceptions on microblaze. -# -# -#################################################################### +/****************************************************************************** +* +* Enable exceptions on microblaze. +* +* +******************************************************************************/ #include "xparameters.h" @@ -50,9 +51,6 @@ microblaze_enable_exceptions: ori r4, r4, 0x100; /* Turn ON the EE bit */ mts rmsr, r4; rtsd r15, 8; - nop; + nop; #endif /*XPAR_MICROBLAZE_USE_MSR_INSTR == 1*/ .end microblaze_enable_exceptions - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_enable_icache.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_enable_icache.S similarity index 86% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_enable_icache.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_enable_icache.S index ce8f58a72..a398f1fd4 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_enable_icache.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_enable_icache.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,18 +29,18 @@ * this Software without prior written authorization from Xilinx. * ******************************************************************************/ -# -# File : microblaze_enable_icache.s -# Date : 2002, March 20. -# Company: Xilinx -# Group : Emerging Software Technologies -# -# Summary: -# Enable icache on the microblaze. -# -# -#################################################################### - +/****************************************************************************** +* +* File : microblaze_enable_icache.s +* Date : 2002, March 20. +* Company: Xilinx +* Group : Emerging Software Technologies +* +* Summary: +* Enable icache on the microblaze. +* +* +******************************************************************************/ #include "xparameters.h" .text @@ -63,6 +63,3 @@ microblaze_enable_icache: nop #endif /*XPAR_MICROBLAZE_USE_MSR_INSTR == 1*/ .end microblaze_enable_icache - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_enable_interrupts.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_enable_interrupts.S similarity index 83% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_enable_interrupts.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_enable_interrupts.S index e65d183c7..11c8c667b 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_enable_interrupts.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_enable_interrupts.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,25 +29,26 @@ * this Software without prior written authorization from Xilinx. * ******************************************************************************/ -# -# File : microblaze_enable_interrupts.s -# Date : 2002, March 20. -# Company: Xilinx -# Group : Emerging Software Technologies -# -# Summary: -# Enable interrupts on the microblaze. -# -# -#################################################################### +/****************************************************************************** +* +* File : microblaze_enable_interrupts.s +* Date : 2002, March 20. +* Company: Xilinx +* Group : Emerging Software Technologies +* +* Summary: +* Enable interrupts on the microblaze. +* +* +******************************************************************************/ -#include "xparameters.h" +#include "xparameters.h" .text .globl microblaze_enable_interrupts .ent microblaze_enable_interrupts .align 2 -microblaze_enable_interrupts: +microblaze_enable_interrupts: #if XPAR_MICROBLAZE_USE_MSR_INSTR == 1 rtsd r15, 8 msrset r0, 0x2 @@ -63,6 +64,3 @@ microblaze_enable_interrupts: nop #endif /*XPAR_MICROBLAZE_USE_MSR_INSTR == 1*/ .end microblaze_enable_interrupts - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_exception_handler.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_exception_handler.c similarity index 98% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_exception_handler.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_exception_handler.c index 426f7c12c..a504f2729 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_exception_handler.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_exception_handler.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_exceptions_g.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_exceptions_g.h similarity index 83% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_exceptions_g.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_exceptions_g.h index a7bfea40d..f5f0c6e63 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_exceptions_g.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_exceptions_g.h @@ -5,7 +5,7 @@ * Version: * DO NOT EDIT. * -* Copyright (C) 2010-2015 Xilinx, Inc. All Rights Reserved.* +* Copyright (C) 2010-2016 Xilinx, Inc. All Rights Reserved.* *Permission is hereby granted, free of charge, to any person obtaining a copy *of this software and associated documentation files (the Software), to deal *in the Software without restriction, including without limitation the rights @@ -22,8 +22,8 @@ * *THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -*XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +*XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, *WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT *OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * @@ -37,8 +37,3 @@ * *******************************************************************/ -#define MICROBLAZE_EXCEPTIONS_ENABLED 1 -#define MICROBLAZE_CAN_HANDLE_EXCEPTIONS_IN_DELAY_SLOTS -#define MICROBLAZE_FP_EXCEPTION_ENABLED 1 - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_exceptions_i.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_exceptions_i.h similarity index 83% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_exceptions_i.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_exceptions_i.h index c6b616b5f..b7e0d9635 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_exceptions_i.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_exceptions_i.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2012 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2012 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -67,17 +67,17 @@ typedef struct } MB_ExceptionVectorTableEntry; /* Exception IDs */ -#define XEXC_ID_FSL 0 -#define XEXC_ID_UNALIGNED_ACCESS 1 -#define XEXC_ID_ILLEGAL_OPCODE 2 -#define XEXC_ID_M_AXI_I_EXCEPTION 3 -#define XEXC_ID_IPLB_EXCEPTION 3 -#define XEXC_ID_M_AXI_D_EXCEPTION 4 -#define XEXC_ID_DPLB_EXCEPTION 4 -#define XEXC_ID_DIV_BY_ZERO 5 -#define XEXC_ID_FPU 6 -#define XEXC_ID_STACK_VIOLATION 7 -#define XEXC_ID_MMU 7 +#define XEXC_ID_FSL 0U +#define XEXC_ID_UNALIGNED_ACCESS 1U +#define XEXC_ID_ILLEGAL_OPCODE 2U +#define XEXC_ID_M_AXI_I_EXCEPTION 3U +#define XEXC_ID_IPLB_EXCEPTION 3U +#define XEXC_ID_M_AXI_D_EXCEPTION 4U +#define XEXC_ID_DPLB_EXCEPTION 4U +#define XEXC_ID_DIV_BY_ZERO 5U +#define XEXC_ID_FPU 6U +#define XEXC_ID_STACK_VIOLATION 7U +#define XEXC_ID_MMU 7U void microblaze_register_exception_handler(u32 ExceptionId, Xil_ExceptionHandler Handler, void *DataPtr); diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_flush_cache_ext.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_flush_cache_ext.S similarity index 90% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_flush_cache_ext.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_flush_cache_ext.S index e47b0a37a..a22576888 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_flush_cache_ext.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_flush_cache_ext.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,9 +28,12 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * +******************************************************************************/ +/****************************************************************************** +* * microblaze_flush_cache_ext() * -* Flush the entire L2 Cache +* Flush the entire L2 Cache * * *******************************************************************************/ @@ -48,7 +51,7 @@ microblaze_flush_cache_ext: #if ((XPAR_MICROBLAZE_INTERCONNECT==3) && (XPAR_MICROBLAZE_USE_DCACHE==1)) addik r5, r0, XPAR_MICROBLAZE_DCACHE_BASEADDR & (-(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN)) - + addik r6, r0, XPAR_MICROBLAZE_DCACHE_BYTE_SIZE-(4 * XPAR_MICROBLAZE_EXT_CACHE_LINE_LEN) andi r6, r6, -(4 * XPAR_MICROBLAZE_EXT_CACHE_LINE_LEN) @@ -60,6 +63,3 @@ Loop_start: rtsd r15, 8 nop .end microblaze_flush_cache_ext - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_flush_cache_ext_range.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_flush_cache_ext_range.S similarity index 90% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_flush_cache_ext_range.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_flush_cache_ext_range.S index b315c3d9a..9251db20c 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_flush_cache_ext_range.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_flush_cache_ext_range.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,11 +28,14 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * +******************************************************************************/ +/****************************************************************************** +* * microblaze_flush_cache_ext_range (unsigned int cacheaddr, unsigned int len) * *Flush a L2 Cache range * -*Parameters: +*Parameters: * 'cacheaddr' - address in the L2 cache where the flush begins * 'len ' - length (in bytes) worth of L2 cache to be flushed * @@ -63,12 +66,9 @@ Loop_start: bneid r6, Loop_start addik r6, r6, -(4 * XPAR_MICROBLAZE_EXT_CACHE_LINE_LEN) -Loop_done: +Loop_done: #endif rtsd r15, 8 nop .end microblaze_flush_cache_ext_range - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_flush_dcache.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_flush_dcache.S similarity index 80% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_flush_dcache.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_flush_dcache.S index ed89fad2c..1f18cce78 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_flush_dcache.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_flush_dcache.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,9 +28,13 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * +******************************************************************************/ +/****************************************************************************** +* +* * microblaze_flush_dcache() -* -* Flush the L1 DCache +* +* Flush the L1 DCache * *******************************************************************************/ @@ -38,11 +42,11 @@ #define MICROBLAZE_MSR_DCACHE_ENABLE 0x00000080 #define MICROBLAZE_MSR_INTR_ENABLE 0x00000002 - + #ifndef XPAR_MICROBLAZE_DCACHE_LINE_LEN #define XPAR_MICROBLAZE_DCACHE_LINE_LEN 1 #endif - + .text .globl microblaze_flush_dcache .ent microblaze_flush_dcache @@ -50,21 +54,18 @@ microblaze_flush_dcache: addik r5, r0, XPAR_MICROBLAZE_DCACHE_BASEADDR & (-(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN)) /* Align to cache line */ - addik r6, r5, XPAR_MICROBLAZE_DCACHE_BYTE_SIZE & (-(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN)) /* Compute end */ - + addik r6, r5, XPAR_MICROBLAZE_DCACHE_BYTE_SIZE & (-(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN)) /* Compute end */ + L_start: wdc.flush r5, r0 /* Flush the Cache */ - - cmpu r18, r5, r6 /* Are we at the end? */ - blei r18, L_done - brid L_start /* Branch to the beginning of the loop */ + cmpu r18, r5, r6 /* Are we at the end? */ + blei r18, L_done + + brid L_start /* Branch to the beginning of the loop */ addik r5, r5, (XPAR_MICROBLAZE_DCACHE_LINE_LEN * 4) /* Increment the addrees by 4 (delay slot) */ -L_done: +L_done: rtsd r15, 8 /* Return */ nop .end microblaze_flush_dcache - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_flush_dcache_range.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_flush_dcache_range.S similarity index 85% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_flush_dcache_range.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_flush_dcache_range.S index 1919a950c..0bb81cd34 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_flush_dcache_range.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_flush_dcache_range.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,11 +28,14 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * +******************************************************************************/ +/****************************************************************************** +* * microblaze_flush_dcache_range (unsigned int cacheaddr, unsigned int len) -* +* * Flush a L1 DCache range -* -* Parameters: +* +* Parameters: * 'cacheaddr' - address in the Dcache where the flush begins * 'len ' - length (in bytes) worth of Dcache to be flushed * @@ -42,7 +45,7 @@ #define MICROBLAZE_MSR_DCACHE_ENABLE 0x00000080 #define MICROBLAZE_MSR_INTR_ENABLE 0x00000002 - + #ifndef XPAR_MICROBLAZE_DCACHE_LINE_LEN #define XPAR_MICROBLAZE_DCACHE_LINE_LEN 1 #endif @@ -61,32 +64,32 @@ microblaze_flush_dcache_range: -#ifdef MB_VERSION_LT_v720 /* Disable Dcache and interrupts before invalidating */ - mfs r9, rmsr +#ifdef MB_VERSION_LT_v720 /* Disable Dcache and interrupts before invalidating */ + mfs r9, rmsr andi r10, r9, ~(MICROBLAZE_MSR_DCACHE_ENABLE | MICROBLAZE_MSR_INTR_ENABLE) mts rmsr, r10 #endif beqi r6, L_done /* Skip loop if size is zero */ - + add r6, r5, r6 /* Compute end address */ addik r6, r6, -1 - - andi r6, r6, -(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN) /* Align end down to cache line */ + + andi r6, r6, -(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN) /* Align end down to cache line */ andi r5, r5, -(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN) /* Align start down to cache line */ #if MB_HAS_WRITEBACK_SET == 0 /* Use a different scheme for MB version < v7.20 or when caches are write-through */ - + L_start: - cmpu r18, r5, r6 /* Are we at the end? */ - blti r18, L_done - + cmpu r18, r5, r6 /* Are we at the end? */ + blti r18, L_done + wdc r5, r0 /* Invalidate the cache line */ - - brid L_start /* Branch to the beginning of the loop */ + + brid L_start /* Branch to the beginning of the loop */ addik r5, r5, (XPAR_MICROBLAZE_DCACHE_LINE_LEN * 4) /* Increment the addrees by 4 (delay slot) */ #else - rsubk r6, r5, r6 + rsubk r6, r5, r6 /* r6 will now contain (count of bytes - (4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN)) */ L_start: wdc.flush r5, r6 /* Flush the cache line */ @@ -94,15 +97,12 @@ L_start: addik r6, r6, -(XPAR_MICROBLAZE_DCACHE_LINE_LEN * 4) #endif - -L_done: - rtsd r15, 8 + +L_done: + rtsd r15, 8 #ifdef MB_VERSION_LT_v720 /* restore MSR only for MB version < v7.20 */ mts rmsr, r9 #else nop #endif .end microblaze_flush_dcache_range - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_init_dcache_range.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_init_dcache_range.S similarity index 84% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_init_dcache_range.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_init_dcache_range.S index dd23ee354..925a387f4 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_init_dcache_range.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_init_dcache_range.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2006 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2006 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,11 +28,14 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * +******************************************************************************/ +/****************************************************************************** +* * microblaze_init_dcache_range (unsigned int cache_start, unsigned int cache_len) -* +* * Invalidate dcache on the microblaze -* -* Parameters: +* +* Parameters: * 'cache_start' - address in the Dcache where invalidation begins * 'cache_len' - length (in bytes) worth of Dcache to be invalidated * @@ -43,11 +46,11 @@ #define MICROBLAZE_MSR_DCACHE_ENABLE 0x00000080 #define MICROBLAZE_MSR_INTR_ENABLE 0x00000002 - + #ifndef XPAR_MICROBLAZE_DCACHE_LINE_LEN #define XPAR_MICROBLAZE_DCACHE_LINE_LEN 1 #endif - + .text .globl microblaze_init_dcache_range .ent microblaze_init_dcache_range @@ -61,22 +64,19 @@ microblaze_init_dcache_range: andi r5, r5, -(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN) /* Align to cache line */ - add r6, r5, r6 /* Compute end */ + add r6, r5, r6 /* Compute end */ andi r6, r6, -(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN) /* Align to cache line */ - + L_start: wdc r5, r0 /* Invalidate the Cache (delay slot) */ - - cmpu r18, r5, r6 /* Are we at the end ? */ - blei r18, L_done - brid L_start /* Branch to the beginning of the loop */ + cmpu r18, r5, r6 /* Are we at the end ? */ + blei r18, L_done + + brid L_start /* Branch to the beginning of the loop */ addik r5, r5, (XPAR_MICROBLAZE_DCACHE_LINE_LEN * 4) /* Increment the addrees by 4 (delay slot) */ -L_done: +L_done: rtsd r15, 8 /* Return */ mts rmsr, r9 .end microblaze_init_dcache_range - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_init_icache_range.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_init_icache_range.S similarity index 84% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_init_icache_range.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_init_icache_range.S index 982fea356..15563f871 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_init_icache_range.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_init_icache_range.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2006 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2006 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,12 +28,15 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * +******************************************************************************/ +/****************************************************************************** +* * * microblaze_init_icache_range (unsigned int cache_start, unsigned int cache_len) -* +* * Invalidate icache on the microblaze -* -* Parameters: +* +* Parameters: * 'cache_start' - address in the Icache where invalidation begins * 'cache_len' - length (in bytes) worth of Icache to be invalidated * @@ -44,11 +47,11 @@ #define MICROBLAZE_MSR_ICACHE_ENABLE 0x00000020 #define MICROBLAZE_MSR_INTR_ENABLE 0x00000002 - + #ifndef XPAR_MICROBLAZE_ICACHE_LINE_LEN #define XPAR_MICROBLAZE_ICACHE_LINE_LEN 1 #endif - + .text .globl microblaze_init_icache_range .ent microblaze_init_icache_range @@ -62,22 +65,19 @@ microblaze_init_icache_range: andi r5, r5, -(4 * XPAR_MICROBLAZE_ICACHE_LINE_LEN) /* Align to cache line */ - add r6, r5, r6 /* Compute end */ + add r6, r5, r6 /* Compute end */ andi r6, r6, -(4 * XPAR_MICROBLAZE_ICACHE_LINE_LEN) /* Align to cache line */ - + L_start: wic r5, r0 /* Invalidate the Cache (delay slot) */ - - cmpu r18, r5, r6 /* Are we at the end ? */ - blei r18, L_done - brid L_start /* Branch to the beginning of the loop */ + cmpu r18, r5, r6 /* Are we at the end ? */ + blei r18, L_done + + brid L_start /* Branch to the beginning of the loop */ addik r5, r5, (XPAR_MICROBLAZE_ICACHE_LINE_LEN * 4) /* Increment the addrees by 4 (delay slot) */ -L_done: +L_done: rtsd r15, 8 /* Return */ mts rmsr, r9 .end microblaze_init_icache_range - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_interrupt_handler.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_interrupt_handler.c similarity index 95% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_interrupt_handler.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_interrupt_handler.c index 6465494ab..a8a8e7b85 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_interrupt_handler.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_interrupt_handler.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -64,6 +64,7 @@ /************************** Function Prototypes ******************************/ void __interrupt_handler (void) __attribute__ ((interrupt_handler)); +void microblaze_register_handler(XInterruptHandler Handler, void *DataPtr); /************************** Variable Definitions *****************************/ @@ -91,7 +92,7 @@ extern MB_InterruptVectorTableEntry MB_InterruptVectorTable; void __interrupt_handler(void) { /* The compiler saves all volatiles and the MSR */ - MB_InterruptVectorTable.Handler(MB_InterruptVectorTable.CallBackRef); + (void)MB_InterruptVectorTable.Handler(MB_InterruptVectorTable.CallBackRef); /* The compiler restores all volatiles and MSR, and returns from interrupt */ } @@ -119,4 +120,3 @@ void microblaze_register_handler(XInterruptHandler Handler, void *DataPtr) MB_InterruptVectorTable.Handler = Handler; MB_InterruptVectorTable.CallBackRef = DataPtr; } - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_interrupts_g.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_interrupts_g.c similarity index 85% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_interrupts_g.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_interrupts_g.c index b022071fc..dda78bce7 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_interrupts_g.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_interrupts_g.c @@ -5,7 +5,7 @@ * Version: * DO NOT EDIT. * -* Copyright (C) 2010-2015 Xilinx, Inc. All Rights Reserved.* +* Copyright (C) 2010-2016 Xilinx, Inc. All Rights Reserved.* *Permission is hereby granted, free of charge, to any person obtaining a copy *of this software and associated documentation files (the Software), to deal *in the Software without restriction, including without limitation the rights @@ -22,8 +22,8 @@ * *THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -*XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +*XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, *WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT *OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * @@ -41,7 +41,7 @@ #include "xparameters.h" -extern void XIntc_DeviceInterruptHandler (void *); +extern void XNullHandler (void *); /* * The interrupt handler table for microblaze processor @@ -49,7 +49,7 @@ extern void XIntc_DeviceInterruptHandler (void *); MB_InterruptVectorTableEntry MB_InterruptVectorTable[] = { -{ XIntc_DeviceInterruptHandler, - (void*) XPAR_AXI_INTC_0_DEVICE_ID} +{ XNullHandler, + (void*) XNULL} }; diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_interrupts_i.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_interrupts_i.h similarity index 97% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_interrupts_i.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_interrupts_i.h index 6f0c7faf6..d0fecdbc5 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_interrupts_i.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_interrupts_i.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_cache_ext.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_cache_ext.S similarity index 87% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_cache_ext.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_cache_ext.S index 82d76a7a3..d806519a7 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_cache_ext.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_cache_ext.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,9 +28,12 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * +******************************************************************************/ +/****************************************************************************** +* * microblaze_invalidate_cache_ext() * -*Invalidate the entire L2 Cache +*Invalidate the entire L2 Cache * * *******************************************************************************/ @@ -48,19 +51,16 @@ microblaze_invalidate_cache_ext: #if ((XPAR_MICROBLAZE_INTERCONNECT==3) && (XPAR_MICROBLAZE_USE_DCACHE==1)) addik r5, r0, XPAR_MICROBLAZE_DCACHE_BASEADDR & (-(4 * XPAR_MICROBLAZE_EXT_CACHE_LINE_LEN)) - + addik r6, r0, XPAR_MICROBLAZE_DCACHE_BYTE_SIZE-(4 * XPAR_MICROBLAZE_EXT_CACHE_LINE_LEN) - andi r6, r6, -(4 * XPAR_MICROBLAZE_EXT_CACHE_LINE_LEN) + andi r6, r6, -(4 * XPAR_MICROBLAZE_EXT_CACHE_LINE_LEN) Loop_start: wdc.ext.clear r5, r6 bgtid r6,Loop_start addik r6, r6,-(4 * XPAR_MICROBLAZE_EXT_CACHE_LINE_LEN) -#endif +#endif rtsd r15, 8 nop .end microblaze_invalidate_cache_ext - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_cache_ext_range.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_cache_ext_range.S similarity index 91% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_cache_ext_range.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_cache_ext_range.S index 3f2fd92fc..13ce65e17 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_cache_ext_range.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_cache_ext_range.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,6 +28,9 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * +******************************************************************************/ +/****************************************************************************** +* * microblaze_invalidate_cache_ext_range (unsigned int cacheaddr, unsigned int len) * *Invalidate an L2 cache range @@ -64,12 +67,9 @@ Loop_start: bneid r6, Loop_start addik r6, r6, -(4 * XPAR_MICROBLAZE_EXT_CACHE_LINE_LEN) -Loop_done: +Loop_done: #endif rtsd r15, 8 nop .end microblaze_invalidate_cache_ext_range - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_dcache.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_dcache.S similarity index 78% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_dcache.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_dcache.S index 78bf07813..6a51217ff 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_dcache.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_dcache.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,9 +28,12 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * +******************************************************************************/ +/****************************************************************************** +* * microblaze_invalidate_dcache() -* -* Invalidate the entire L1 DCache +* +* Invalidate the entire L1 DCache * * *******************************************************************************/ @@ -39,7 +42,7 @@ #define MICROBLAZE_MSR_DCACHE_ENABLE 0x00000080 #define MICROBLAZE_MSR_INTR_ENABLE 0x00000002 - + #ifndef XPAR_MICROBLAZE_DCACHE_LINE_LEN #define XPAR_MICROBLAZE_DCACHE_LINE_LEN 1 #endif @@ -47,7 +50,7 @@ #ifndef XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK #define MB_VERSION_LT_v720 #endif - + .text .globl microblaze_invalidate_dcache .ent microblaze_invalidate_dcache @@ -55,24 +58,24 @@ microblaze_invalidate_dcache: -#ifdef MB_VERSION_LT_v720 /* Disable Dcache and interrupts before invalidating */ - mfs r9, rmsr +#ifdef MB_VERSION_LT_v720 /* Disable Dcache and interrupts before invalidating */ + mfs r9, rmsr andi r10, r9, ~(MICROBLAZE_MSR_DCACHE_ENABLE | MICROBLAZE_MSR_INTR_ENABLE) mts rmsr, r10 #endif - addik r5, r0, XPAR_MICROBLAZE_DCACHE_BASEADDR & (-(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN)) - addik r6, r5, XPAR_MICROBLAZE_DCACHE_BYTE_SIZE & (-(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN)) /* Compute end */ - + addik r5, r0, XPAR_MICROBLAZE_DCACHE_BASEADDR & (-(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN)) + addik r6, r5, XPAR_MICROBLAZE_DCACHE_BYTE_SIZE & (-(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN)) /* Compute end */ + L_start: wdc r5, r0 /* Invalidate the Cache */ - - cmpu r18, r5, r6 /* Are we at the end? */ - blei r18, L_done - brid L_start /* Branch to the beginning of the loop */ + cmpu r18, r5, r6 /* Are we at the end? */ + blei r18, L_done + + brid L_start /* Branch to the beginning of the loop */ addik r5, r5, (XPAR_MICROBLAZE_DCACHE_LINE_LEN * 4) /* Increment the addrees by 4 (delay slot) */ -L_done: +L_done: rtsd r15, 8 /* Return */ #ifdef MB_VERSION_LT_v720 /* restore MSR only for MB version < v7.20 */ mts rmsr, r9 @@ -81,6 +84,3 @@ L_done: #endif .end microblaze_invalidate_dcache - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_dcache_range.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_dcache_range.S similarity index 84% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_dcache_range.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_dcache_range.S index 3766063e9..7c455c653 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_dcache_range.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_dcache_range.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,12 +28,15 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * +******************************************************************************/ +/****************************************************************************** +* * * microblaze_invalidate_dcache_range (unsigned int cacheaddr, unsigned int len) -* +* * Invalidate a Dcache range -* -* Parameters: +* +* Parameters: * 'cacheaddr' - address in the Dcache where invalidation begins * 'len ' - length (in bytes) worth of Dcache to be invalidated * @@ -44,7 +47,7 @@ #define MICROBLAZE_MSR_DCACHE_ENABLE 0x00000080 #define MICROBLAZE_MSR_INTR_ENABLE 0x00000002 - + #ifndef XPAR_MICROBLAZE_DCACHE_LINE_LEN #define XPAR_MICROBLAZE_DCACHE_LINE_LEN 1 #endif @@ -55,7 +58,7 @@ #else #define MB_HAS_WRITEBACK_SET XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK #endif - + .text .globl microblaze_invalidate_dcache_range .ent microblaze_invalidate_dcache_range @@ -63,34 +66,34 @@ microblaze_invalidate_dcache_range: - -#ifdef MB_VERSION_LT_v720 /* Disable Dcache and interrupts before invalidating */ - mfs r9, rmsr + +#ifdef MB_VERSION_LT_v720 /* Disable Dcache and interrupts before invalidating */ + mfs r9, rmsr andi r10, r9, ~(MICROBLAZE_MSR_DCACHE_ENABLE | MICROBLAZE_MSR_INTR_ENABLE) mts rmsr, r10 #endif beqi r6, L_done /* Skip loop if size is zero */ - + add r6, r5, r6 /* Compute end address */ addik r6, r6, -1 - - andi r6, r6, -(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN) /* Align end down to cache line */ + + andi r6, r6, -(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN) /* Align end down to cache line */ andi r5, r5, -(4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN) /* Align start down to cache line */ - + #if MB_HAS_WRITEBACK_SET == 0 /* Use a different scheme for MB version < v7.20 or when caches are write-through */ - + L_start: - cmpu r18, r5, r6 /* Are we at the end? */ - blti r18, L_done - - wdc r5, r0 - - brid L_start /* Branch to the beginning of the loop */ + cmpu r18, r5, r6 /* Are we at the end? */ + blti r18, L_done + + wdc r5, r0 + + brid L_start /* Branch to the beginning of the loop */ addik r5, r5, (XPAR_MICROBLAZE_DCACHE_LINE_LEN * 4) /* Increment the addrees by 4 (delay slot) */ #else - rsubk r6, r5, r6 + rsubk r6, r5, r6 /* r6 will now contain (count of bytes - (4 * XPAR_MICROBLAZE_DCACHE_LINE_LEN)) */ L_start: wdc.clear r5, r6 /* Invalidate the cache line only if the address matches */ @@ -98,15 +101,12 @@ L_start: addik r6, r6, -(XPAR_MICROBLAZE_DCACHE_LINE_LEN * 4) #endif - -L_done: - rtsd r15, 8 + +L_done: + rtsd r15, 8 #ifdef MB_VERSION_LT_v720 /* restore MSR only for MB version < v7.20 */ mts rmsr, r9 #else nop #endif .end microblaze_invalidate_dcache_range - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_icache.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_icache.S similarity index 80% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_icache.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_icache.S index f0013e891..d244e6677 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_icache.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_icache.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,9 +28,12 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * +******************************************************************************/ +/****************************************************************************** +* * * microblaze_invalidate_icache() -* +* * Invalidate the entire ICache * * @@ -40,7 +43,7 @@ #define MICROBLAZE_MSR_ICACHE_ENABLE 0x00000020 #define MICROBLAZE_MSR_INTR_ENABLE 0x00000002 - + #ifndef XPAR_MICROBLAZE_ICACHE_LINE_LEN #define XPAR_MICROBLAZE_ICACHE_LINE_LEN 1 #endif @@ -48,7 +51,7 @@ #ifndef XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK #define MB_VERSION_LT_v720 #endif - + .text .globl microblaze_invalidate_icache .ent microblaze_invalidate_icache @@ -56,23 +59,23 @@ microblaze_invalidate_icache: -#ifdef MB_VERSION_LT_v720 /* Disable Icache and interrupts before invalidating */ +#ifdef MB_VERSION_LT_v720 /* Disable Icache and interrupts before invalidating */ mfs r9, rmsr andi r10, r9, ~(MICROBLAZE_MSR_ICACHE_ENABLE | MICROBLAZE_MSR_INTR_ENABLE) mts rmsr, r10 #endif - addik r5, r0, XPAR_MICROBLAZE_ICACHE_BASEADDR & (-(4 * XPAR_MICROBLAZE_ICACHE_LINE_LEN)) /* Align to cache line */ - addik r6, r5, XPAR_MICROBLAZE_CACHE_BYTE_SIZE & (-(4 * XPAR_MICROBLAZE_ICACHE_LINE_LEN)) /* Compute end */ + addik r5, r0, XPAR_MICROBLAZE_ICACHE_BASEADDR & (-(4 * XPAR_MICROBLAZE_ICACHE_LINE_LEN)) /* Align to cache line */ + addik r6, r5, XPAR_MICROBLAZE_CACHE_BYTE_SIZE & (-(4 * XPAR_MICROBLAZE_ICACHE_LINE_LEN)) /* Compute end */ L_start: wic r5, r0 /* Invalidate the Cache */ - - cmpu r18, r5, r6 /* Are we at the end? */ - blei r18, L_done - brid L_start /* Branch to the beginning of the loop */ + cmpu r18, r5, r6 /* Are we at the end? */ + blei r18, L_done + + brid L_start /* Branch to the beginning of the loop */ addik r5, r5, (XPAR_MICROBLAZE_ICACHE_LINE_LEN * 4) /* Increment the addrees by 4 (delay slot) */ -L_done: +L_done: rtsd r15, 8 /* Return */ #ifdef MB_VERSION_LT_v720 /* restore MSR only for MB version < v7.20 */ @@ -81,6 +84,3 @@ L_done: nop #endif .end microblaze_invalidate_icache - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_icache_range.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_icache_range.S similarity index 85% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_icache_range.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_icache_range.S index 63515598b..5a82d261a 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_invalidate_icache_range.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_invalidate_icache_range.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,12 +28,15 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * +******************************************************************************/ +/****************************************************************************** +* * * microblaze_invalidate_icache_range(unsigned int cacheaddr, unsigned int len) -* +* * Invalidate an ICache range -* -* Parameters: +* +* Parameters: * 'cacheaddr' - address in the Icache where invalidation begins * 'len' - length (in bytes) worth of Icache to be invalidated * @@ -44,7 +47,7 @@ #define MICROBLAZE_MSR_ICACHE_ENABLE 0x00000020 #define MICROBLAZE_MSR_INTR_ENABLE 0x00000002 - + #ifndef XPAR_MICROBLAZE_ICACHE_LINE_LEN #define XPAR_MICROBLAZE_ICACHE_LINE_LEN 1 #endif @@ -52,7 +55,7 @@ #ifndef XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK #define MB_VERSION_LT_v720 #endif - + .text .globl microblaze_invalidate_icache_range .ent microblaze_invalidate_icache_range @@ -60,27 +63,27 @@ microblaze_invalidate_icache_range: -#ifdef MB_VERSION_LT_v720 /* Disable Icache and interrupts before invalidating */ - mfs r9, rmsr +#ifdef MB_VERSION_LT_v720 /* Disable Icache and interrupts before invalidating */ + mfs r9, rmsr andi r10, r9, ~(MICROBLAZE_MSR_ICACHE_ENABLE | MICROBLAZE_MSR_INTR_ENABLE) mts rmsr, r10 #endif beqi r6, L_done /* Skip loop if size is zero */ - + add r6, r5, r6 /* Compute end address */ addik r6, r6, -1 - - andi r6, r6, -(4 * XPAR_MICROBLAZE_ICACHE_LINE_LEN) /* Align end down to cache line */ + + andi r6, r6, -(4 * XPAR_MICROBLAZE_ICACHE_LINE_LEN) /* Align end down to cache line */ andi r5, r5, -(4 * XPAR_MICROBLAZE_ICACHE_LINE_LEN) /* Align start down to cache line */ L_start: - cmpu r18, r5, r6 /* Are we at the end? */ - blti r18, L_done + cmpu r18, r5, r6 /* Are we at the end? */ + blti r18, L_done wic r5, r0 /* Invalidate the cache line */ - - brid L_start /* Branch to the beginning of the loop */ + + brid L_start /* Branch to the beginning of the loop */ addik r5, r5, (XPAR_MICROBLAZE_ICACHE_LINE_LEN * 4) /* Increment the addrees by 4 (delay slot) */ L_done: @@ -91,6 +94,3 @@ L_done: nop #endif .end microblaze_invalidate_icache_range - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_scrub.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_scrub.S similarity index 96% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_scrub.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_scrub.S index fb5bf93f0..6c1512abd 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_scrub.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_scrub.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2012 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2012 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,6 +28,9 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * +******************************************************************************/ +/****************************************************************************** +* * microblaze_scrub () * * Scrub LMB memory and all internal BRAMs (data cache, instruction cache, diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_sleep.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_sleep.c similarity index 96% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_sleep.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_sleep.c index d75600f2a..0e34cc628 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_sleep.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_sleep.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -80,9 +80,9 @@ * @note Instruction cache should be enabled for this to work. * ******************************************************************************/ -void MB_Sleep(unsigned int MilliSeconds) +void MB_Sleep(u32 MilliSeconds) { - if (((mfmsr() & 0x20) == 0)) { + if (((mfmsr() & 0x20U) == 0U)) { /* * Instruction cache not enabled. * Delay will be much higher than expected. diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_sleep.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_sleep.h similarity index 96% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_sleep.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_sleep.h index 285055397..ab4e8f444 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_sleep.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_sleep.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -74,7 +74,7 @@ extern "C" { /************************** Function Prototypes ******************************/ -void MB_Sleep(unsigned int MilliSeconds); +void MB_Sleep(u32 MilliSeconds); #ifdef __cplusplus } diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_update_dcache.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_update_dcache.S similarity index 92% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_update_dcache.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_update_dcache.S index 91d8d7b7c..0d497e74c 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_update_dcache.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_update_dcache.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2006 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2006 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,7 +28,10 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * -* +******************************************************************************/ +/****************************************************************************** +* +* * File : microblaze_update_dcache.s * Date : 2003, September 24 * Company: Xilinx @@ -49,14 +52,14 @@ * | 0 | 0 | Invalidate Cache * | 0 | 1 | Valid, but unlocked cacheline * | 1 | 0 | Invalidate Cache, No effect of lock -* | 1 | 1 | Valid cache. Locked to a +* | 1 | 1 | Valid cache. Locked to a * | | | particular addrees * -------------------------------------------------------------- * * **********************************************************************************/ #include "xparameters.h" - + #ifndef XPAR_MICROBLAZE_DCACHE_LINE_LEN #define XPAR_MICROBLAZE_DCACHE_LINE_LEN 1 #endif @@ -97,7 +100,7 @@ microblaze_update_dcache: addik r6, r0, (XPAR_MICROBLAZE_DCACHE_LINE_LEN * 4) /* We don't have a return instruction here. This is tail call optimization :) */ - + #endif /* XPAR_MICROBLAZE_DCACHE_LINE_LEN == 1 */ .end microblaze_update_dcache diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_update_icache.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_update_icache.S similarity index 91% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_update_icache.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_update_icache.S index 79d70ee92..789f6bb8d 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/microblaze_update_icache.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/microblaze_update_icache.S @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2006 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2006 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,6 +28,9 @@ * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * +******************************************************************************/ +/****************************************************************************** +* * File : microblaze_update_icache.s * Date : 2003, September 24 * Company: Xilinx @@ -48,14 +51,14 @@ * | 0 | 0 | Invalidate Cache * | 0 | 1 | Valid, but unlocked cacheline * | 1 | 0 | Invalidate Cache, No effect of lock -* | 1 | 1 | Valid cache. Locked to a +* | 1 | 1 | Valid cache. Locked to a * | | | particular addrees * -------------------------------------------------------------- * * **********************************************************************************/ #include "xparameters.h" - + #ifndef XPAR_MICROBLAZE_ICACHE_LINE_LEN #define XPAR_MICROBLAZE_ICACHE_LINE_LEN 1 #endif @@ -67,7 +70,7 @@ microblaze_update_icache: #if XPAR_MICROBLAZE_ICACHE_LINE_LEN == 1 - + /* Read the MSR register into a temp register */ mfs r18, rmsr @@ -96,8 +99,7 @@ microblaze_update_icache: addik r6, r0, (XPAR_MICROBLAZE_ICACHE_LINE_LEN * 4) /* We don't have a return instruction here. This is tail call optimization :) */ - -#endif /* XPAR_MICROBLAZE_ICACHE_LINE_LEN == 1 */ - .end microblaze_update_icache +#endif /* XPAR_MICROBLAZE_ICACHE_LINE_LEN == 1 */ + .end microblaze_update_icache diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/outbyte.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/outbyte.c new file mode 100644 index 000000000..094da9a92 --- /dev/null +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/outbyte.c @@ -0,0 +1,15 @@ +#include "xparameters.h" +#include "xuartlite_l.h" + +#ifdef __cplusplus +extern "C" { +#endif +void outbyte(char c); + +#ifdef __cplusplus +} +#endif + +void outbyte(char c) { + XUartLite_SendByte(STDOUT_BASEADDRESS, c); +} diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/print.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/print.c new file mode 100644 index 000000000..31d7b1989 --- /dev/null +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/print.c @@ -0,0 +1,32 @@ +/* print.c -- print a string on the output device. + * + * Copyright (c) 1995 Cygnus Support + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + * + */ + +/* + * print -- do a raw print of a string + */ +#include "xil_printf.h" + +void print(const char8 *ptr) +{ +#ifdef STDOUT_BASEADDRESS + while (*ptr != (char8)0) { + outbyte (*ptr); + *ptr++; + } +#else +(void)ptr; +#endif +} diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/Makefile b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/Makefile similarity index 93% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/Makefile rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/Makefile index 6182558b5..891fdf643 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/Makefile +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/Makefile @@ -1,7 +1,6 @@ -#$Id: Makefile,v 1.1.2.1 2011/05/17 04:37:55 sadanan Exp $ ############################################################################### # -# Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +# Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -32,17 +31,17 @@ ############################################################################### # # Makefile for profiler -# +# ####################################################################### # PROFILE_ARCH_OBJS - Processor Architecture Dependent files defined here include ../config.make AS=mb-as -COMPILER = mb-gcc +COMPILER = mb-gcc ARCHIVER = mb-ar CP = cp -COMPILER_FLAGS=-O2 +COMPILER_FLAGS=-O2 EXTRA_COMPILER_FLAGS= LIB = libxil.a DUMMYLIB = libxilprofile.a @@ -54,7 +53,7 @@ RELEASEDIR = ../../../../lib INCLUDEDIR = ../../../../include INCLUDES = -I./. -I${INCLUDEDIR} -OBJS = _profile_init.o _profile_clean.o _profile_timer_hw.o profile_hist.o profile_cg.o +OBJS = _profile_init.o _profile_clean.o _profile_timer_hw.o profile_hist.o profile_cg.o DUMMYOBJ = dummy.o INCLUDEFILES = profile.h mblaze_nt_types.h _profile_timer_hw.h @@ -72,7 +71,7 @@ dummylibs : $(DUMMYOBJ) %.o:%.S $(COMPILER) $(CC_FLAGS) $(ECC_FLAGS) -c $< -o $@ $(INCLUDES) -include: +include: $(CP) -rf $(INCLUDEFILES) $(INCLUDEDIR) clean: diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/_profile_clean.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/_profile_clean.c similarity index 93% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/_profile_clean.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/_profile_clean.c index bd6955e86..1d8aada04 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/_profile_clean.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/_profile_clean.c @@ -1,7 +1,6 @@ -// $Id: _profile_clean.c,v 1.1.2.1 2011/05/17 04:37:55 sadanan Exp $ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -35,6 +34,8 @@ #include "_profile_timer_hw.h" #include "xil_exception.h" +void _profile_clean( void ); + /* * This function is the exit routine and is called by the crtinit, when the * program terminates. The name needs to be changed later.. @@ -44,4 +45,3 @@ void _profile_clean( void ) Xil_ExceptionDisable(); disable_timer(); } - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/_profile_init.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/_profile_init.c similarity index 59% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/_profile_init.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/_profile_init.c index 809f3468b..0ac51b175 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/_profile_init.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/_profile_init.c @@ -1,7 +1,6 @@ -// $Id: _profile_init.c,v 1.1.2.1 2011/05/17 04:37:56 sadanan Exp $ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -38,57 +37,54 @@ #include "profile.h" -// XMD Initializes the following Global Variables Value during Program -// Download with appropriate values. +/* XMD Initializes the following Global Variables Value during Program + * Download with appropriate values. */ #ifdef PROC_MICROBLAZE -extern int microblaze_init(void); +extern s32 microblaze_init(void); #elif defined PROC_PPC -extern int powerpc405_init(void); +extern s32 powerpc405_init(void); #else -extern int cortexa9_init(void); +extern s32 cortexa9_init(void); #endif +s32 profile_version = 1; /* Version of S/W Intrusive Profiling library */ +u32 binsize = (u32)BINSIZE; /* Histogram Bin Size */ +u32 cpu_clk_freq = (u32)CPU_FREQ_HZ ; /* CPU Clock Frequency */ +u32 sample_freq_hz = (u32)SAMPLE_FREQ_HZ ; /* Histogram Sampling Frequency */ +u32 timer_clk_ticks = (u32)TIMER_CLK_TICKS ;/* Timer Clock Ticks for the Timer */ -int profile_version = 1; // Version of S/W Intrusive Profiling library +/* Structure for Storing the Profiling Data */ +struct gmonparam *_gmonparam = (struct gmonparam *)(0xffffffffU); +s32 n_gmon_sections = 1; -int binsize = BINSIZE; // Histogram Bin Size -unsigned int cpu_clk_freq = CPU_FREQ_HZ ; // CPU Clock Frequency -unsigned int sample_freq_hz = SAMPLE_FREQ_HZ ; // Histogram Sampling Frequency -unsigned int timer_clk_ticks = TIMER_CLK_TICKS ;// Timer Clock Ticks for the Timer +/* This is the initialization code, which is called from the crtinit. */ -// Structure for Storing the Profiling Data -struct gmonparam *_gmonparam = (struct gmonparam *)0xffffffff; -int n_gmon_sections = 1; - -// This is the initialization code, which is called from the crtinit. -// void _profile_init( void ) { -/* print("Gmon Init called....\r\n") ; */ -/* putnum(n_gmon_sections) ; print("\r\n") ; */ +/* print("Gmon Init called....\r\n") */ +/* putnum(n_gmon_sections) , print("\r\n") */ /* if( _gmonparam == 0xffffffff ) */ -/* printf("Gmonparam is NULL !!\r\n"); */ -/* for( i = 0; i < n_gmon_sections; i++ ){ */ -/* putnum(_gmonparam[i].lowpc) ; print("\t") ; */ -/* putnum(_gmonparam[i].highpc) ; print("\r\n") ; */ -/* putnum( _gmonparam[i].textsize ); print("\r\n") ; */ -/* putnum( _gmonparam[i].kcountsize * sizeof(unsigned short));print("\r\n"); */ -/* } */ +/* printf("Gmonparam is NULL !!\r\n") */ +/* for( i = 0, i < n_gmon_sections, i++ )[ */ +/* putnum( _gmonparam[i].lowpc) , print("\t") */ +/* putnum( _gmonparam[i].highpc) , print("\r\n") */ +/* putnum( _gmonparam[i].textsize ), print("\r\n") */ +/* putnum( _gmonparam[i].kcountsize * sizeof(unsigned short)), print("\r\n") */ +/* ] */ #ifdef PROC_MICROBLAZE - microblaze_init(); + (void)microblaze_init(); #elif defined PROC_PPC powerpc405_init(); #else - cortexa9_init (); + (void)cortexa9_init(); #endif } - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/_profile_timer_hw.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/_profile_timer_hw.c new file mode 100644 index 000000000..e85fb5c2d --- /dev/null +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/_profile_timer_hw.c @@ -0,0 +1,387 @@ +/****************************************************************************** +* +* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. +* +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in +* all copies or substantial portions of the Software. +* +* Use of the Software is limited solely to applications: +* (a) running on a Xilinx device, or +* (b) that interact with a Xilinx device through a bus or interconnect. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +* +* Except as contained in this notice, the name of the Xilinx shall not be used +* in advertising or otherwise to promote the sale, use or other dealings in +* this Software without prior written authorization from Xilinx. +* +****************************************************************************** +* +* _program_timer_hw.c: +* Timer related functions +* +******************************************************************************/ + +#include "profile.h" +#include "_profile_timer_hw.h" + +#include "xil_exception.h" + +#ifdef PROC_PPC +#include "xtime_l.h" +#include "xpseudo_asm.h" +#endif + +#ifdef TIMER_CONNECT_INTC +#include "xintc_l.h" +#include "xintc.h" +#endif /* TIMER_CONNECT_INTC */ + +/* #ifndef PPC_PIT_INTERRUPT */ +#if (!defined PPC_PIT_INTERRUPT && !defined PROC_CORTEXA9) +#include "xtmrctr_l.h" +#endif + +/* extern u32 timer_clk_ticks, */ + +#ifdef PROC_PPC405 +#ifdef PPC_PIT_INTERRUPT +s32 ppc_pit_init( void ); +#endif +s32 powerpc405_init() +#endif /* PROC_CORTEXA9 */ + +#ifdef PROC_PPC440 +#ifdef PPC_PIT_INTERRUPT +s32 ppc_dec_init( void ); +#endif +s32 powerpc405_init(void); +#endif /* PROC_PPC440 */ + +#if (!defined PPC_PIT_INTERRUPT && !defined PROC_CORTEXA9) +s32 opb_timer_init( void ); +#endif + +#ifdef PROC_MICROBLAZE +s32 microblaze_init(void); +#endif /* PROC_MICROBLAZE */ + +#ifdef PROC_CORTEXA9 +s32 scu_timer_init( void ); +s32 cortexa9_init(void); +#endif /* PROC_CORTEXA9 */ + + +/*-------------------------------------------------------------------- + * PowerPC Target - Timer related functions + *-------------------------------------------------------------------- */ +#ifdef PROC_PPC405 + + +/*-------------------------------------------------------------------- +* PowerPC PIT Timer Init. +* Defined only if PIT Timer is used for Profiling +* +*-------------------------------------------------------------------- */ +#ifdef PPC_PIT_INTERRUPT +int ppc_pit_init( void ) +{ + /* 1. Register Profile_intr_handler as Interrupt handler */ + /* 2. Set PIT Timer Interrupt and Enable it. */ + Xil_ExceptionRegisterHandler( XIL_EXCEPTION_ID_PIT_INT, + (Xil_ExceptionHandler)profile_intr_handler,NULL); + XTime_PITSetInterval( timer_clk_ticks ) ; + XTime_PITEnableAutoReload() ; + return 0; +} +#endif + + +/* -------------------------------------------------------------------- +* PowerPC Timer Initialization functions. +* For PowerPC, PIT and opb_timer can be used for Profiling. This +* is selected by the user in standalone BSP +* +*-------------------------------------------------------------------- */ +s32 powerpc405_init() +{ + Xil_ExceptionInit() ; + Xil_ExceptionDisableMask( XIL_EXCEPTION_NON_CRITICAL ) ; + + /* Initialize the Timer. + * 1. If PowerPC PIT Timer has to be used, initialize PIT timer. + * 2. Else use opb_timer. It can be directly connected or thru intc to PowerPC */ +#ifdef PPC_PIT_INTERRUPT + ppc_pit_init(); +#else +#ifdef TIMER_CONNECT_INTC + Xil_ExceptionRegisterHandler( XIL_EXCEPTION_ID_NON_CRITICAL_INT, + (Xil_ExceptionHandler)XIntc_DeviceInterruptHandler,NULL); + XIntc_RegisterHandler( INTC_BASEADDR, PROFILE_TIMER_INTR_ID, + (XInterruptHandler)profile_intr_handler,NULL); +#else + Xil_ExceptionRegisterHandler( XIL_EXCEPTION_ID_NON_CRITICAL_INT, + (Xil_ExceptionHandler)profile_intr_handler,NULL); +#endif + /* Initialize the timer with Timer Ticks */ + opb_timer_init() ; +#endif + + /* Enable Interrupts in the System, if Profile Timer is the only Interrupt + * in the System. */ +#ifdef ENABLE_SYS_INTR +#ifdef PPC_PIT_INTERRUPT + XTime_PITEnableInterrupt() ; +#elif TIMER_CONNECT_INTC + XIntc_MasterEnable( INTC_BASEADDR ); + XIntc_SetIntrSvcOption( INTC_BASEADDR, XIN_SVC_ALL_ISRS_OPTION); + XIntc_EnableIntr( INTC_BASEADDR, PROFILE_TIMER_INTR_MASK ); +#endif + Xil_ExceptionEnableMask( XIL_EXCEPTION_NON_CRITICAL ) ; +#endif + return 0; +} + +#endif /* PROC_PPC */ + + + +/*-------------------------------------------------------------------- + * PowerPC440 Target - Timer related functions + * -------------------------------------------------------------------- */ +#ifdef PROC_PPC440 + + +/*-------------------------------------------------------------------- + * PowerPC DEC Timer Init. + * Defined only if DEC Timer is used for Profiling + * + *-------------------------------------------------------------------- */ +#ifdef PPC_PIT_INTERRUPT +s32 ppc_dec_init( void ) +{ + /* 1. Register Profile_intr_handler as Interrupt handler */ + /* 2. Set DEC Timer Interrupt and Enable it. */ + Xil_ExceptionRegisterHandler( XIL_EXCEPTION_ID_DEC_INT, + (Xil_ExceptionHandler)profile_intr_handler,NULL); + XTime_DECSetInterval( timer_clk_ticks ) ; + XTime_DECEnableAutoReload() ; + return 0; +} +#endif + + +/*-------------------------------------------------------------------- + * PowerPC Timer Initialization functions. + * For PowerPC, DEC and opb_timer can be used for Profiling. This + * is selected by the user in standalone BSP + * + *-------------------------------------------------------------------- */ +s32 powerpc405_init(void) +{ + Xil_ExceptionInit(); + Xil_ExceptionDisableMask( XIL_EXCEPTION_NON_CRITICAL ) ; + + /* Initialize the Timer. + * 1. If PowerPC DEC Timer has to be used, initialize DEC timer. + * 2. Else use opb_timer. It can be directly connected or thru intc to PowerPC */ +#ifdef PPC_PIT_INTERRUPT + ppc_dec_init(); +#else +#ifdef TIMER_CONNECT_INTC + Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_NON_CRITICAL_INT, + (Xil_ExceptionHandler)XIntc_DeviceInterruptHandler,NULL); + + XIntc_RegisterHandler( INTC_BASEADDR, PROFILE_TIMER_INTR_ID, + (XInterruptHandler)profile_intr_handler,NULL); +#else + Xil_ExceptionRegisterHandler( XIL_EXCEPTION_ID_NON_CRITICAL_INT, + (Xil_ExceptionHandler)profile_intr_handler,NULL); + Xil_ExceptionRegisterHandler( XIL_EXCEPTION_ID_NON_CRITICAL_INT, + (Xil_ExceptionHandler)profile_intr_handler,NULL); +#endif + /* Initialize the timer with Timer Ticks */ + opb_timer_init() ; +#endif + + /* Enable Interrupts in the System, if Profile Timer is the only Interrupt + * in the System. */ +#ifdef ENABLE_SYS_INTR +#ifdef PPC_PIT_INTERRUPT + XTime_DECEnableInterrupt() ; +#elif TIMER_CONNECT_INTC + XIntc_MasterEnable( INTC_BASEADDR ); + XIntc_SetIntrSvcOption( INTC_BASEADDR, XIN_SVC_ALL_ISRS_OPTION); + XIntc_EnableIntr( INTC_BASEADDR, PROFILE_TIMER_INTR_MASK ); +#endif + Xil_ExceptionEnableMask( XEXC_NON_CRITICAL ) ; +#endif + return 0; +} + +#endif /* PROC_PPC440 */ + +/* -------------------------------------------------------------------- + * opb_timer Initialization for PowerPC and MicroBlaze. This function + * is not needed if DEC timer is used in PowerPC + * + *-------------------------------------------------------------------- */ +/* #ifndef PPC_PIT_INTERRUPT */ +#if (!defined PPC_PIT_INTERRUPT && !defined PROC_CORTEXA9) +s32 opb_timer_init( void ) +{ + /* set the number of cycles the timer counts before interrupting */ + XTmrCtr_SetLoadReg((u32)PROFILE_TIMER_BASEADDR, (u16)0, (u32)timer_clk_ticks); + + /* reset the timers, and clear interrupts */ + XTmrCtr_SetControlStatusReg((u32)PROFILE_TIMER_BASEADDR, (u16)0, + (u32)XTC_CSR_INT_OCCURED_MASK | (u32)XTC_CSR_LOAD_MASK ); + + /* start the timers */ + XTmrCtr_SetControlStatusReg((u32)PROFILE_TIMER_BASEADDR, (u16)0, (u32)XTC_CSR_ENABLE_TMR_MASK + | (u32)XTC_CSR_ENABLE_INT_MASK | (u32)XTC_CSR_AUTO_RELOAD_MASK | (u32)XTC_CSR_DOWN_COUNT_MASK); + return 0; +} +#endif + + +/*-------------------------------------------------------------------- + * MicroBlaze Target - Timer related functions + *-------------------------------------------------------------------- */ +#ifdef PROC_MICROBLAZE + +/* -------------------------------------------------------------------- + * Initialize the Profile Timer for MicroBlaze Target. + * For MicroBlaze, opb_timer is used. The opb_timer can be directly + * connected to MicroBlaze or connected through Interrupt Controller. + * + *-------------------------------------------------------------------- */ +s32 microblaze_init(void) +{ + /* Register profile_intr_handler + * 1. If timer is connected to Interrupt Controller, register the handler + * to Interrupt Controllers vector table. + * 2. If timer is directly connected to MicroBlaze, register the handler + * as Interrupt handler */ + Xil_ExceptionInit(); + +#ifdef TIMER_CONNECT_INTC + XIntc_RegisterHandler( INTC_BASEADDR, PROFILE_TIMER_INTR_ID, + (XInterruptHandler)profile_intr_handler,NULL); +#else + Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, + (Xil_ExceptionHandler)profile_intr_handler, + NULL) ; +#endif + + /* Initialize the timer with Timer Ticks */ + (void)opb_timer_init() ; + + /* Enable Interrupts in the System, if Profile Timer is the only Interrupt + * in the System. */ +#ifdef ENABLE_SYS_INTR +#ifdef TIMER_CONNECT_INTC + XIntc_MasterEnable((u32)INTC_BASEADDR ); + XIntc_SetIntrSvcOption( INTC_BASEADDR, XIN_SVC_ALL_ISRS_OPTION); + XIntc_EnableIntr( (u32)INTC_BASEADDR, PROFILE_TIMER_INTR_MASK ); + Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, + (Xil_ExceptionHandler)XIntc_DeviceInterruptHandler,NULL); +#endif + +#endif + + Xil_ExceptionEnable(); + + return 0; + +} + +#endif /* PROC_MICROBLAZE */ + + + +/* -------------------------------------------------------------------- + * Cortex A9 Target - Timer related functions + *-------------------------------------------------------------------- */ +#ifdef PROC_CORTEXA9 + +/* -------------------------------------------------------------------- + * Initialize the Profile Timer for Cortex A9 Target. + * The scu private timer is connected to the Scu GIC controller. + * + *-------------------------------------------------------------------- */ +s32 scu_timer_init( void ) +{ + /* set the number of cycles the timer counts before interrupting + * scu timer runs at half the cpu clock */ + XScuTimer_SetLoadReg(PROFILE_TIMER_BASEADDR, timer_clk_ticks/2U); + + /* clear any pending interrupts */ + XScuTimer_SetIntrReg(PROFILE_TIMER_BASEADDR, 1U); + + /* enable interrupts, auto-reload mode and start the timer */ + XScuTimer_SetControlReg(PROFILE_TIMER_BASEADDR, XSCUTIMER_CONTROL_IRQ_ENABLE_MASK | + XSCUTIMER_CONTROL_AUTO_RELOAD_MASK | XSCUTIMER_CONTROL_ENABLE_MASK); + + return 0; +} + +s32 cortexa9_init(void) +{ + + Xil_ExceptionInit(); + + XScuGic_DeviceInitialize(0); + + /* + * Connect the interrupt controller interrupt handler to the hardware + * interrupt handling logic in the processor. + */ + Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT, + (Xil_ExceptionHandler)XScuGic_DeviceInterruptHandler, + NULL); + + /* + * Connect the device driver handler that will be called when an + * interrupt for the device occurs, the handler defined above performs + * the specific interrupt processing for the device. + */ + XScuGic_RegisterHandler(SCUGIC_CPU_BASEADDR, + PROFILE_TIMER_INTR_ID, + (Xil_ExceptionHandler)profile_intr_handler, + NULL); + + /* + * Enable the interrupt for scu timer. + */ + XScuGic_EnableIntr(SCUGIC_DIST_BASEADDR, PROFILE_TIMER_INTR_ID); + + /* + * Enable interrupts in the Processor. + */ + Xil_ExceptionEnableMask(XIL_EXCEPTION_IRQ); + + /* + * Initialize the timer with Timer Ticks + */ + (void)scu_timer_init() ; + + Xil_ExceptionEnable(); + + return 0; +} + +#endif /* PROC_CORTEXA9 */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/_profile_timer_hw.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/_profile_timer_hw.h similarity index 51% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/_profile_timer_hw.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/_profile_timer_hw.h index ac8968fcf..2cee66b09 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/_profile_timer_hw.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/_profile_timer_hw.h @@ -1,7 +1,6 @@ -// $Id: _profile_timer_hw.h,v 1.1.2.2 2011/05/30 06:46:18 svemula Exp $ /****************************************************************************** * -* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2004 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -36,8 +35,8 @@ * ******************************************************************************/ -#ifndef _PROFILE_TIMER_HW_H -#define _PROFILE_TIMER_HW_H +#ifndef PROFILE_TIMER_HW_H +#define PROFILE_TIMER_HW_H #include "profile.h" @@ -52,26 +51,26 @@ #endif #ifdef PROC_PPC -#define ProfIo_In32(InputPtr) (*(volatile u32 *)(InputPtr)); SYNCHRONIZE_IO; +#define ProfIo_In32(InputPtr) { (*(volatile u32 *)(InputPtr)); SYNCHRONIZE_IO; } #define ProfIo_Out32(OutputPtr, Value) { (*(volatile u32 *)(OutputPtr) = Value); SYNCHRONIZE_IO; } #else #define ProfIo_In32(InputPtr) (*(volatile u32 *)(InputPtr)); -#define ProfIo_Out32(OutputPtr, Value) { (*(volatile u32 *)(OutputPtr) = Value); } +#define ProfIo_Out32(OutputPtr, Value) { (*(volatile u32 *)(OutputPtr) = (Value)); } #endif #define ProfTmrCtr_mWriteReg(BaseAddress, TmrCtrNumber, RegOffset, ValueToWrite)\ - ProfIo_Out32(((BaseAddress) + XTmrCtr_Offsets[(TmrCtrNumber)] + \ - (RegOffset)), (ValueToWrite)) + ProfIo_Out32(((u32)(BaseAddress) + (u32)XTmrCtr_Offsets[(TmrCtrNumber)] + \ + (u32)(RegOffset)), (u32)(ValueToWrite)) #define ProfTimerCtr_mReadReg(BaseAddress, TmrCtrNumber, RegOffset) \ - ProfIo_In32((BaseAddress) + XTmrCtr_Offsets[(TmrCtrNumber)] + (RegOffset)) + ProfIo_In32((u32)(BaseAddress) + (u32)XTmrCtr_Offsets[(TmrCtrNumber)] + (u32)(RegOffset)) #define ProfTmrCtr_mSetControlStatusReg(BaseAddress, TmrCtrNumber, RegisterValue)\ ProfTmrCtr_mWriteReg((BaseAddress), (TmrCtrNumber), XTC_TCSR_OFFSET, \ (RegisterValue)) #define ProfTmrCtr_mGetControlStatusReg(BaseAddress, TmrCtrNumber) \ - ProfTimerCtr_mReadReg((BaseAddress), (TmrCtrNumber), XTC_TCSR_OFFSET) + ProfTimerCtr_mReadReg((u32)(BaseAddress), (TmrCtrNumber), XTC_TCSR_OFFSET) @@ -88,7 +87,7 @@ extern "C" { #ifdef TIMER_CONNECT_INTC #include "xintc_l.h" #include "xintc.h" -#endif // TIMER_CONNECT_INTC +#endif /* TIMER_CONNECT_INTC */ #if (!defined PPC_PIT_INTERRUPT && !defined PROC_CORTEXA9) #include "xtmrctr_l.h" @@ -99,15 +98,15 @@ extern "C" { #include "xscugic.h" #endif -extern unsigned int timer_clk_ticks ; +extern u32 timer_clk_ticks ; -//-------------------------------------------------------------------- -// PowerPC Target - Timer related functions -//-------------------------------------------------------------------- +/*-------------------------------------------------------------------- + * PowerPC Target - Timer related functions + *-------------------------------------------------------------------- */ #ifdef PROC_PPC #ifdef PPC_PIT_INTERRUPT -unsigned long timer_lo_clk_ticks ; // Clk ticks when Timer is disabled in CG +u32 timer_lo_clk_ticks ; /* Clk ticks when Timer is disabled in CG */ #endif #ifdef PROC_PPC440 @@ -117,21 +116,21 @@ unsigned long timer_lo_clk_ticks ; // Clk ticks when Timer is disabled in CG #define XEXC_ID_PIT_INT XEXC_ID_DEC_INT #endif -//-------------------------------------------------------------------- -// Disable the Timer - During Profiling -// -// For PIT Timer - -// 1. XTime_PITDisableInterrupt() ; -// 2. Store the remaining timer clk tick -// 3. Stop the PIT Timer -//-------------------------------------------------------------------- +/* -------------------------------------------------------------------- + * Disable the Timer - During Profiling + * + * For PIT Timer - + * 1. XTime_PITDisableInterrupt() ; + * 2. Store the remaining timer clk tick + * 3. Stop the PIT Timer + *-------------------------------------------------------------------- */ #ifdef PPC_PIT_INTERRUPT #define disable_timer() \ { \ - unsigned long val; \ + u32 val; \ val=mfspr(XREG_SPR_TCR); \ - mtspr(XREG_SPR_TCR, val & ~XREG_TCR_PIT_INTERRUPT_ENABLE); \ + mtspr(XREG_SPR_TCR, val & (~XREG_TCR_PIT_INTERRUPT_ENABLE)); \ timer_lo_clk_ticks = mfspr(XREG_SPR_PIT); \ mtspr(XREG_SPR_PIT, 0); \ } @@ -140,24 +139,24 @@ unsigned long timer_lo_clk_ticks ; // Clk ticks when Timer is disabled in CG { \ u32 addr = (PROFILE_TIMER_BASEADDR) + XTmrCtr_Offsets[(0)] + XTC_TCSR_OFFSET; \ u32 tmp_v = ProfIo_In32(addr); \ - tmp_v = tmp_v & ~XTC_CSR_ENABLE_TMR_MASK; \ + tmp_v = tmp_v & (~XTC_CSR_ENABLE_TMR_MASK); \ ProfIo_Out32((PROFILE_TIMER_BASEADDR) + XTmrCtr_Offsets[(0)] + XTC_TCSR_OFFSET, tmp_v); \ } #endif -//-------------------------------------------------------------------- -// Enable the Timer -// -// For PIT Timer - -// 1. Load the remaining timer clk ticks -// 2. XTime_PITEnableInterrupt() ; -//-------------------------------------------------------------------- +/* -------------------------------------------------------------------- + * Enable the Timer + * + * For PIT Timer - + * 1. Load the remaining timer clk ticks + * 2. XTime_PITEnableInterrupt() ; + *-------------------------------------------------------------------- */ #ifdef PPC_PIT_INTERRUPT #define enable_timer() \ { \ - unsigned long val; \ + u32 val; \ val=mfspr(XREG_SPR_TCR); \ mtspr(XREG_SPR_PIT, timer_lo_clk_ticks); \ mtspr(XREG_SPR_TCR, val | XREG_TCR_PIT_INTERRUPT_ENABLE); \ @@ -174,18 +173,18 @@ unsigned long timer_lo_clk_ticks ; // Clk ticks when Timer is disabled in CG -//-------------------------------------------------------------------- -// Send Ack to Timer Interrupt -// -// For PIT Timer - -// 1. Load the timer clk ticks -// 2. Enable AutoReload and Interrupt -// 3. Clear PIT Timer Status bits -//-------------------------------------------------------------------- +/* -------------------------------------------------------------------- + * Send Ack to Timer Interrupt + * + * For PIT Timer - + * 1. Load the timer clk ticks + * 2. Enable AutoReload and Interrupt + * 3. Clear PIT Timer Status bits + *-------------------------------------------------------------------- */ #ifdef PPC_PIT_INTERRUPT #define timer_ack() \ { \ - unsigned long val; \ + u32 val; \ mtspr(XREG_SPR_PIT, timer_clk_ticks); \ mtspr(XREG_SPR_TSR, XREG_TSR_PIT_INTERRUPT_STATUS); \ val=mfspr(XREG_SPR_TCR); \ @@ -194,109 +193,116 @@ unsigned long timer_lo_clk_ticks ; // Clk ticks when Timer is disabled in CG #else #define timer_ack() \ { \ - unsigned int csr; \ + u32 csr; \ csr = ProfTmrCtr_mGetControlStatusReg(PROFILE_TIMER_BASEADDR, 0); \ ProfTmrCtr_mSetControlStatusReg(PROFILE_TIMER_BASEADDR, 0, csr); \ } #endif -//-------------------------------------------------------------------- -#endif // PROC_PPC -//-------------------------------------------------------------------- +/*-------------------------------------------------------------------- */ +#endif /* PROC_PPC */ +/* -------------------------------------------------------------------- */ -//-------------------------------------------------------------------- -// MicroBlaze Target - Timer related functions -//-------------------------------------------------------------------- +/* -------------------------------------------------------------------- + * MicroBlaze Target - Timer related functions + *-------------------------------------------------------------------- */ #ifdef PROC_MICROBLAZE -//-------------------------------------------------------------------- -// Disable the Timer during Call-Graph Data collection -// -//-------------------------------------------------------------------- +/* -------------------------------------------------------------------- + * Disable the Timer during Call-Graph Data collection + * + *-------------------------------------------------------------------- */ #define disable_timer() \ { \ - u32 addr = (PROFILE_TIMER_BASEADDR) + XTmrCtr_Offsets[(0)] + XTC_TCSR_OFFSET; \ - u32 tmp_v = ProfIo_In32(addr); \ - tmp_v = tmp_v & ~XTC_CSR_ENABLE_TMR_MASK; \ - ProfIo_Out32((PROFILE_TIMER_BASEADDR) + XTmrCtr_Offsets[(0)] + XTC_TCSR_OFFSET, tmp_v); \ + u32 Addr = ((u32)PROFILE_TIMER_BASEADDR); \ + Addr += (u32)XTmrCtr_Offsets[(u16)(0)]; \ + Addr += (u32)XTC_TCSR_OFFSET; \ + u32 tmp_v = ProfIo_In32(Addr); \ + tmp_v = tmp_v & (u32)(~XTC_CSR_ENABLE_TMR_MASK); \ + u32 OutAddr = (u32)PROFILE_TIMER_BASEADDR; \ + OutAddr += (u32)XTmrCtr_Offsets[(u16)(0)]; \ + OutAddr += (u32)XTC_TCSR_OFFSET; \ + ProfIo_Out32(OutAddr, (u32)tmp_v); \ } -//-------------------------------------------------------------------- -// Enable the Timer after Call-Graph Data collection -// -//-------------------------------------------------------------------- +/* -------------------------------------------------------------------- + * Enable the Timer after Call-Graph Data collection + * + *-------------------------------------------------------------------- */ #define enable_timer() \ { \ - u32 addr = (PROFILE_TIMER_BASEADDR) + XTmrCtr_Offsets[(0)] + XTC_TCSR_OFFSET; \ - u32 tmp_v = ProfIo_In32(addr); \ - tmp_v = tmp_v | XTC_CSR_ENABLE_TMR_MASK; \ - ProfIo_Out32((PROFILE_TIMER_BASEADDR) + XTmrCtr_Offsets[(0)] + XTC_TCSR_OFFSET, tmp_v); \ + u32 Addr = ((u32)PROFILE_TIMER_BASEADDR); \ + Addr += (u32)XTmrCtr_Offsets[(u16)(0)]; \ + Addr += (u32)XTC_TCSR_OFFSET; \ + u32 tmp_v = (u32)ProfIo_In32(Addr); \ + tmp_v = tmp_v | (u32)XTC_CSR_ENABLE_TMR_MASK; \ + ProfIo_Out32((u32)(PROFILE_TIMER_BASEADDR) + (u32)XTmrCtr_Offsets[(u16)(0)] + (u32)XTC_TCSR_OFFSET, (u32)tmp_v); \ } -//-------------------------------------------------------------------- -// Send Ack to Timer Interrupt -// -//-------------------------------------------------------------------- +/* -------------------------------------------------------------------- + * Send Ack to Timer Interrupt + * + *-------------------------------------------------------------------- */ #define timer_ack() \ { \ - unsigned int csr; \ - csr = ProfTmrCtr_mGetControlStatusReg(PROFILE_TIMER_BASEADDR, 0); \ - ProfTmrCtr_mSetControlStatusReg(PROFILE_TIMER_BASEADDR, 0, csr); \ + u32 csr; \ + csr = ProfTmrCtr_mGetControlStatusReg((u32)PROFILE_TIMER_BASEADDR, (u16)0); \ + ProfTmrCtr_mSetControlStatusReg((u32)PROFILE_TIMER_BASEADDR, (u16)0, (u32)csr); \ } -//-------------------------------------------------------------------- -#endif // PROC_MICROBLAZE -//-------------------------------------------------------------------- +/*-------------------------------------------------------------------- */ +#endif /* PROC_MICROBLAZE */ +/*-------------------------------------------------------------------- */ -//-------------------------------------------------------------------- -// Cortex A9 Target - Timer related functions -//-------------------------------------------------------------------- +/* -------------------------------------------------------------------- + * Cortex A9 Target - Timer related functions + *-------------------------------------------------------------------- */ #ifdef PROC_CORTEXA9 -//-------------------------------------------------------------------- -// Disable the Timer during Call-Graph Data collection -// -//-------------------------------------------------------------------- +/* -------------------------------------------------------------------- + * Disable the Timer during Call-Graph Data collection + * + *-------------------------------------------------------------------- */ #define disable_timer() \ { \ u32 Reg; \ Reg = Xil_In32(PROFILE_TIMER_BASEADDR + XSCUTIMER_CONTROL_OFFSET); \ - Reg &= ~XSCUTIMER_CONTROL_ENABLE_MASK;\ + Reg &= (~XSCUTIMER_CONTROL_ENABLE_MASK);\ Xil_Out32(PROFILE_TIMER_BASEADDR + XSCUTIMER_CONTROL_OFFSET, Reg);\ -} \ +} -//-------------------------------------------------------------------- -// Enable the Timer after Call-Graph Data collection -// -//-------------------------------------------------------------------- +/* -------------------------------------------------------------------- + * Enable the Timer after Call-Graph Data collection + * + *-------------------------------------------------------------------- */ #define enable_timer() \ { \ u32 Reg; \ Reg = Xil_In32(PROFILE_TIMER_BASEADDR + XSCUTIMER_CONTROL_OFFSET); \ Reg |= XSCUTIMER_CONTROL_ENABLE_MASK; \ Xil_Out32(PROFILE_TIMER_BASEADDR + XSCUTIMER_CONTROL_OFFSET, Reg);\ -} \ +} -//-------------------------------------------------------------------- -// Send Ack to Timer Interrupt -// -//-------------------------------------------------------------------- +/* -------------------------------------------------------------------- + * Send Ack to Timer Interrupt + * + *-------------------------------------------------------------------- */ #define timer_ack() \ { \ - Xil_Out32(PROFILE_TIMER_BASEADDR + XSCUTIMER_ISR_OFFSET, \ - XSCUTIMER_ISR_EVENT_FLAG_MASK);\ + Xil_Out32((u32)PROFILE_TIMER_BASEADDR + (u32)XSCUTIMER_ISR_OFFSET, \ + (u32)XSCUTIMER_ISR_EVENT_FLAG_MASK);\ } -//-------------------------------------------------------------------- -#endif // PROC_CORTEXA9 -//-------------------------------------------------------------------- +/*-------------------------------------------------------------------- */ +#endif /* PROC_CORTEXA9 */ +/*-------------------------------------------------------------------- */ #ifdef __cplusplus diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/dummy.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/dummy.S similarity index 89% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/dummy.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/dummy.S index d0d81532b..d28646d6d 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/dummy.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/dummy.S @@ -1,7 +1,6 @@ -// $Id: dummy.S,v 1.1.2.1 2011/05/17 04:37:56 sadanan Exp $ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -34,32 +33,32 @@ .globl dummy_f #ifdef PROC_MICROBLAZE - .text + .text .align 2 .ent dummy_f dummy_f: nop - .end dummy_f + .end dummy_f #endif -#ifdef PROC_PPC +#ifdef PROC_PPC .section .text .align 2 .type dummy_f@function - -dummy_f: + +dummy_f: b dummy_f - + #endif -#ifdef PROC_CORTEXA9 +#ifdef PROC_CORTEXA9 .section .text .align 2 .type dummy_f, %function - -dummy_f: + +dummy_f: b dummy_f - + #endif diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/mblaze_nt_types.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/mblaze_nt_types.h similarity index 93% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/mblaze_nt_types.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/mblaze_nt_types.h index 013a3ba1c..7096a92d8 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/mblaze_nt_types.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/mblaze_nt_types.h @@ -1,7 +1,6 @@ -// $Id: mblaze_nt_types.h,v 1.1.2.2 2011/05/30 06:46:18 svemula Exp $ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile.h similarity index 78% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile.h index 481798e4a..4cb07a7d3 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile.h @@ -1,7 +1,6 @@ -// $Id: profile.h,v 1.1.2.2 2011/05/30 06:46:18 svemula Exp $ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -31,10 +30,11 @@ * ******************************************************************************/ -#ifndef _PROFILE_H -#define _PROFILE_H 1 +#ifndef PROFILE_H +#define PROFILE_H 1 #include +#include "xil_types.h" #include "profile_config.h" #ifdef PROC_MICROBLAZE @@ -47,8 +47,9 @@ extern "C" { void _system_init( void ) ; void _system_clean( void ) ; -void mcount(unsigned long frompc, unsigned long selfpc); +void mcount(u32 frompc, u32 selfpc); void profile_intr_handler( void ) ; +void _profile_init( void ); @@ -59,19 +60,19 @@ void profile_intr_handler( void ) ; /* * histogram counters are unsigned shorts (according to the kernel). */ -#define HISTCOUNTER unsigned short +#define HISTCOUNTER u16 struct tostruct { - unsigned long selfpc; - long count; - short link; - unsigned short pad; + u32 selfpc; + s32 count; + s16 link; + u16 pad; }; struct fromstruct { - unsigned long frompc ; - short link ; - unsigned short pad ; + u32 frompc ; + s16 link ; + u16 pad ; } ; /* @@ -84,27 +85,27 @@ struct fromstruct { * The profiling data structures are housed in this structure. */ struct gmonparam { - long int state; + s32 state; - // Histogram Information - unsigned short *kcount; /* No. of bins in histogram */ - unsigned long kcountsize; /* Histogram samples */ + /* Histogram Information */ + u16 *kcount; /* No. of bins in histogram */ + u32 kcountsize; /* Histogram samples */ - // Call-graph Information + /* Call-graph Information */ struct fromstruct *froms; - unsigned long fromssize; + u32 fromssize; struct tostruct *tos; - unsigned long tossize; - - // Initialization I/Ps - unsigned long lowpc; - unsigned long highpc; - unsigned long textsize; - //unsigned long cg_froms; - //unsigned long cg_tos; + u32 tossize; + + /* Initialization I/Ps */ + u32 lowpc; + u32 highpc; + u32 textsize; + /* u32 cg_froms, */ + /* u32 cg_tos, */ }; extern struct gmonparam *_gmonparam; -extern int n_gmon_sections; +extern s32 n_gmon_sections; /* * Possible states of profiling. @@ -127,16 +128,4 @@ extern int n_gmon_sections; } #endif -#endif /* _PROFILE_H */ - - - - - - - - - - - - +#endif /* PROFILE_H */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_cg.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_cg.c similarity index 66% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_cg.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_cg.c index b871fc1f8..2539ce61a 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_cg.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_cg.c @@ -1,7 +1,6 @@ -// $Id: profile_cg.c,v 1.1.2.1 2011/05/17 04:37:57 sadanan Exp $ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -47,58 +46,69 @@ #include #include -extern struct gmonparam *_gmonparam; +#ifdef PROFILE_NO_FUNCPTR +s32 searchpc(const struct fromto_struct *cgtable, s32 cgtable_size, u32 frompc ); +#else +s32 searchpc(const struct fromstruct *froms, s32 fromssize, u32 frompc ); +#endif + +/*extern struct gmonparam *_gmonparam, */ #ifdef PROFILE_NO_FUNCPTR -int searchpc( struct fromto_struct *cgtable, int cgtable_size, unsigned long frompc ) +s32 searchpc(const struct fromto_struct *cgtable, s32 cgtable_size, u32 frompc ) { - int index = 0 ; + s32 index = 0 ; while( (index < cgtable_size) && (cgtable[index].frompc != frompc) ){ index++ ; } - if( index == cgtable_size ) + if( index == cgtable_size ) { return -1 ; - else + } else { return index ; + } } #else -int searchpc( struct fromstruct *froms, int fromssize, unsigned long frompc ) +s32 searchpc(const struct fromstruct *froms, s32 fromssize, u32 frompc ) { - int index = 0 ; + s32 index = 0 ; + s32 Status; while( (index < fromssize) && (froms[index].frompc != frompc) ){ index++ ; } - if( index == fromssize ) - return -1 ; - else - return index ; + if( index == fromssize ) { + Status = -1 ; + } else { + Status = index ; + } + return Status; } #endif /* PROFILE_NO_FUNCPTR */ -void mcount( unsigned long frompc, unsigned long selfpc ) +void mcount( u32 frompc, u32 selfpc ) { register struct gmonparam *p = NULL; - register long toindex, fromindex; - int j; + register s32 toindex, fromindex; + s32 j; disable_timer(); - //print("CG: "); putnum(frompc); print("->"); putnum(selfpc); print("\r\n"); - // check that frompcindex is a reasonable pc value. - // for example: signal catchers get called from the stack, - // not from text space. too bad. - // + /*print("CG: "), putnum(frompc), print("->"), putnum(selfpc), print("\r\n") , + * check that frompcindex is a reasonable pc value. + * for example: signal catchers get called from the stack, + * not from text space. too bad. + */ for(j = 0; j < n_gmon_sections; j++ ){ if((frompc >= _gmonparam[j].lowpc) && (frompc < _gmonparam[j].highpc)) { p = &_gmonparam[j]; break; } } - if( j == n_gmon_sections ) + if( j == n_gmon_sections ) { goto done; + } #ifdef PROFILE_NO_FUNCPTR fromindex = searchpc( p->cgtable, p->cgtable_size, frompc ) ; @@ -112,51 +122,50 @@ void mcount( unsigned long frompc, unsigned long selfpc ) } p->cgtable[fromindex].count++ ; #else - fromindex = searchpc( p->froms, p->fromssize, frompc ) ; + fromindex = (s32)searchpc( p->froms, ((s32)p->fromssize), frompc ) ; if( fromindex == -1 ) { - fromindex = p->fromssize ; + fromindex = (s32)p->fromssize ; p->fromssize++ ; - //if( fromindex >= N_FROMS ) { - //print("Error : From PC table overflow\r\n") ; - //goto overflow ; - //} + /*if( fromindex >= N_FROMS ) { + * print("Error : From PC table overflow\r\n") + * goto overflow + *}*/ p->froms[fromindex].frompc = frompc ; p->froms[fromindex].link = -1 ; }else { - toindex = p->froms[fromindex].link ; + toindex = ((s32)(p->froms[fromindex].link)); while(toindex != -1) { - toindex = (p->tossize - toindex)-1 ; + toindex = (((s32)p->tossize) - toindex)-1 ; if( p->tos[toindex].selfpc == selfpc ) { p->tos[toindex].count++ ; goto done ; } - toindex = p->tos[toindex].link ; + toindex = ((s32)(p->tos[toindex].link)) ; } } - //if( toindex == -1 ) { + /*if( toindex == -1 ) { */ p->tos-- ; p->tossize++ ; - //if( toindex >= N_TOS ) { - //print("Error : To PC table overflow\r\n") ; - //goto overflow ; - //} + /* if( toindex >= N_TOS ) { + * print("Error : To PC table overflow\r\n") + * goto overflow + *} */ p->tos[0].selfpc = selfpc ; p->tos[0].count = 1 ; p->tos[0].link = p->froms[fromindex].link ; - p->froms[fromindex].link = p->tossize-1 ; + p->froms[fromindex].link = ((s32)(p->tossize))-((s32)1); #endif done: p->state = GMON_PROF_ON; - goto enable_timer ; - //overflow: - p->state = GMON_PROF_ERROR; - enable_timer: + goto enable_timer_label ; + /* overflow: */ + /*p->state = GMON_PROF_ERROR */ + enable_timer_label: enable_timer(); return ; } #endif /* PROFILE_NO_GRAPH */ - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_config.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_config.h similarity index 85% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_config.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_config.h index b80334dc0..550c60b44 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_config.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_config.h @@ -1,7 +1,6 @@ -// $Id: profile_config.h,v 1.1.2.2 2011/05/30 06:46:18 svemula Exp $ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -35,14 +34,14 @@ #ifndef _PROFILE_CONFIG_H #define _PROFILE_CONFIG_H -#define BINSIZE 4 -#define SAMPLE_FREQ_HZ 100000 -#define TIMER_CLK_TICKS 1000 +#define BINSIZE 4U +#define SAMPLE_FREQ_HZ 100000U +#define TIMER_CLK_TICKS 1000U #define PROFILE_NO_FUNCPTR_FLAG 0 -#define PROFILE_TIMER_BASEADDR 0x00608000 -#define PROFILE_TIMER_INTR_ID 0 +#define PROFILE_TIMER_BASEADDR 0x00608000U +#define PROFILE_TIMER_INTR_ID 0U #define TIMER_CONNECT_INTC diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_hist.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_hist.c similarity index 82% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_hist.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_hist.c index 3cd0cbc07..c8ee9cef9 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_hist.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_hist.c @@ -1,7 +1,6 @@ -// $Id: profile_hist.c,v 1.1.2.1 2011/05/17 04:37:57 sadanan Exp $ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -45,29 +44,28 @@ #include "xil_types.h" -extern int binsize ; +extern u32 binsize ; u32 prof_pc ; void profile_intr_handler( void ) { - int j; + s32 j; #ifdef PROC_MICROBLAZE asm( "swi r14, r0, prof_pc" ) ; #elif defined PROC_PPC prof_pc = mfspr(SPR_SRR0); #else - // for cortexa9, lr is saved in asm interrupt handler + /* for cortexa9, lr is saved in asm interrupt handler */ #endif - //print("PC: "); putnum(prof_pc); print("\r\n"); + /* print("PC: "), putnum(prof_pc), print("\r\n"), */ for(j = 0; j < n_gmon_sections; j++ ){ - if((prof_pc >= _gmonparam[j].lowpc) && (prof_pc < _gmonparam[j].highpc)) { - _gmonparam[j].kcount[(prof_pc-_gmonparam[j].lowpc)/(4 * binsize)]++; + if((prof_pc >= ((u32)_gmonparam[j].lowpc)) && (prof_pc < ((u32)_gmonparam[j].highpc))) { + _gmonparam[j].kcount[(prof_pc-_gmonparam[j].lowpc)/((u32)4 * binsize)]++; break; } } - // Ack the Timer Interrupt + /* Ack the Timer Interrupt */ timer_ack(); } - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_mcount_arm.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_mcount_arm.S similarity index 93% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_mcount_arm.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_mcount_arm.S index 2af103af9..e62cec0bd 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_mcount_arm.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_mcount_arm.S @@ -1,7 +1,6 @@ -// $Id: profile_mcount_arm.S,v 1.1.2.1 2011/05/17 04:37:57 sadanan Exp $ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_mcount_mb.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_mcount_mb.S similarity index 89% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_mcount_mb.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_mcount_mb.S index 0a5d8c9ec..bea2726b6 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_mcount_mb.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_mcount_mb.S @@ -1,7 +1,6 @@ -// $Id: profile_mcount_mb.S,v 1.1.2.1 2011/05/17 04:37:58 sadanan Exp $ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -31,13 +30,13 @@ * ******************************************************************************/ - .globl _mcount - .text + .globl _mcount + .text .align 2 .ent _mcount #ifndef PROFILE_NO_GRAPH - + _mcount: addi r1, r1, -48 swi r11, r1, 44 @@ -49,12 +48,12 @@ _mcount: swi r9, r1, 20 swi r10, r1, 16 swi r15, r1, 12 - add r6, r0, r15 + add r5, r0, r15 brlid r15, mcount - lwi r5, r1, 48 + add r6, r0, r16 lwi r11, r1, 44 - lwi r12, r1, 40 + lwi r12, r1, 40 lwi r5, r1, 36 lwi r6, r1, 32 lwi r7, r1, 28 @@ -66,5 +65,5 @@ _mcount: addi r1, r1, 48 #endif /* PROFILE_NO_GRAPH */ - - .end _mcount + + .end _mcount diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_mcount_ppc.S b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_mcount_ppc.S similarity index 90% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_mcount_ppc.S rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_mcount_ppc.S index 6bc83a779..39bb92f77 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/profile/profile_mcount_ppc.S +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/profile/profile_mcount_ppc.S @@ -1,7 +1,6 @@ -// $Id: profile_mcount_ppc.S,v 1.1.2.1 2011/05/17 04:37:58 sadanan Exp $ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -32,9 +31,9 @@ ******************************************************************************/ .globl _mcount - - #define _MCOUNT_STACK_FRAME 48 - .section .text + + #define _MCOUNT_STACK_FRAME 48 + .section .text .align 2 .type _mcount@function @@ -54,7 +53,7 @@ _mcount: mflr 4 stw 4, (_MCOUNT_STACK_FRAME+4)(1) lwz 3, (_MCOUNT_STACK_FRAME)(1) - lwz 3, 4(3) + lwz 3, 4(3) bl mcount lwz 4, (_MCOUNT_STACK_FRAME+4)(1) mtlr 4 @@ -67,7 +66,6 @@ _mcount: lwz 6, 20(1) lwz 5, 16(1) lwz 4, 12(1) - lwz 3, 8(1) + lwz 3, 8(1) addi 1,1, _MCOUNT_STACK_FRAME blr - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/pvr.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/pvr.c similarity index 97% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/pvr.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/pvr.c index da65d0798..ca09703ac 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/pvr.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/pvr.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2006 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2006 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/pvr.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/pvr.h similarity index 99% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/pvr.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/pvr.h index 28825724a..5e8dc897c 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/pvr.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/pvr.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2006 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2006 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -274,4 +274,3 @@ int microblaze_get_pvr (pvr_t *pvr); } #endif #endif /* _PVR_H */ - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xbasic_types.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xbasic_types.h similarity index 96% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xbasic_types.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xbasic_types.h index b2dd2cd87..787212ca7 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xbasic_types.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xbasic_types.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2010 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2010 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -89,15 +89,15 @@ typedef Xuint8 u8; #endif #ifndef TRUE -# define TRUE 1 +# define TRUE 1U #endif #ifndef FALSE -# define FALSE 0 +# define FALSE 0U #endif #ifndef NULL -#define NULL 0 +#define NULL 0U #endif /* diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xdebug.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xdebug.h new file mode 100644 index 000000000..650946bd0 --- /dev/null +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xdebug.h @@ -0,0 +1,32 @@ +#ifndef XDEBUG /* prevent circular inclusions */ +#define XDEBUG /* by using protection macros */ + +#if defined(DEBUG) && !defined(NDEBUG) + +#ifndef XDEBUG_WARNING +#define XDEBUG_WARNING +#warning DEBUG is enabled +#endif + +int printf(const char *format, ...); + +#define XDBG_DEBUG_ERROR 0x00000001U /* error condition messages */ +#define XDBG_DEBUG_GENERAL 0x00000002U /* general debug messages */ +#define XDBG_DEBUG_ALL 0xFFFFFFFFU /* all debugging data */ + +#define xdbg_current_types (XDBG_DEBUG_GENERAL) + +#define xdbg_stmnt(x) x + +#define xdbg_printf(type, ...) (((type) & xdbg_current_types) ? printf (__VA_ARGS__) : 0) + + +#else /* defined(DEBUG) && !defined(NDEBUG) */ + +#define xdbg_stmnt(x) + +#define xdbg_printf(...) + +#endif /* defined(DEBUG) && !defined(NDEBUG) */ + +#endif /* XDEBUG */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xenv.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xenv.h similarity index 98% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xenv.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xenv.h index eebf8e328..3d97bebd4 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xenv.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xenv.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -185,4 +185,3 @@ extern "C" { #endif #endif /* end of protection macro */ - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xenv_standalone.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xenv_standalone.h similarity index 95% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xenv_standalone.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xenv_standalone.h index 271649c4b..f18601874 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xenv_standalone.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xenv_standalone.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -66,6 +66,8 @@ #ifndef XENV_STANDALONE_H #define XENV_STANDALONE_H +#include "xil_types.h" + #ifdef __cplusplus extern "C" { #endif @@ -149,7 +151,7 @@ extern "C" { *****************************************************************************/ #define XENV_MEM_FILL(DestPtr, Data, Bytes) \ - memset((void *) DestPtr, (int) Data, (size_t) Bytes) + memset((void *) DestPtr, (s32) Data, (size_t) Bytes) @@ -163,7 +165,7 @@ extern "C" { * A structure that contains a time stamp used by other time stamp macros * defined below. This structure is processor dependent. */ -typedef int XENV_TIME_STAMP; +typedef s32 XENV_TIME_STAMP; /*****************************************************************************/ /** @@ -278,16 +280,16 @@ typedef int XENV_TIME_STAMP; # define XCACHE_INVALIDATE_DCACHE() microblaze_invalidate_dcache() # define XCACHE_INVALIDATE_DCACHE_RANGE(Addr, Len) \ - microblaze_invalidate_dcache_range((int)(Addr), (int)(Len)) + microblaze_invalidate_dcache_range((s32)(Addr), (s32)(Len)) #if (XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK == 1) # define XCACHE_FLUSH_DCACHE() microblaze_flush_dcache() # define XCACHE_FLUSH_DCACHE_RANGE(Addr, Len) \ - microblaze_flush_dcache_range((int)(Addr), (int)(Len)) + microblaze_flush_dcache_range((s32)(Addr), (s32)(Len)) #else # define XCACHE_FLUSH_DCACHE() microblaze_invalidate_dcache() # define XCACHE_FLUSH_DCACHE_RANGE(Addr, Len) \ - microblaze_invalidate_dcache_range((int)(Addr), (int)(Len)) + microblaze_invalidate_dcache_range((s32)(Addr), (s32)(Len)) #endif /*XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK*/ #else @@ -307,7 +309,7 @@ typedef int XENV_TIME_STAMP; # define XCACHE_INVALIDATE_ICACHE() microblaze_invalidate_icache() # define XCACHE_INVALIDATE_ICACHE_RANGE(Addr, Len) \ - microblaze_invalidate_icache_range((int)(Addr), (int)(Len)) + microblaze_invalidate_icache_range((s32)(Addr), (s32)(Len)) #else # define XCACHE_ENABLE_ICACHE() @@ -340,10 +342,10 @@ typedef int XENV_TIME_STAMP; #define XCACHE_DISABLE_ICACHE() XCache_DisableICache() #define XCACHE_INVALIDATE_DCACHE_RANGE(Addr, Len) \ - XCache_InvalidateDCacheRange((unsigned int)(Addr), (unsigned)(Len)) + XCache_InvalidateDCacheRange((u32)(Addr), (u32)(Len)) #define XCACHE_FLUSH_DCACHE_RANGE(Addr, Len) \ - XCache_FlushDCacheRange((unsigned int)(Addr), (unsigned)(Len)) + XCache_FlushDCacheRange((u32)(Addr), (u32)(Len)) #define XCACHE_INVALIDATE_ICACHE() XCache_InvalidateICache() @@ -364,4 +366,3 @@ typedef int XENV_TIME_STAMP; #endif #endif /* #ifndef XENV_STANDALONE_H */ - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_assert.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_assert.c similarity index 95% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_assert.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_assert.c index 8eba39371..42db07deb 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_assert.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_assert.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -64,14 +64,14 @@ * sets this variable such that a driver can evaluate this variable * to determine if an assert occurred. */ -unsigned int Xil_AssertStatus; +u32 Xil_AssertStatus; /** * This variable allows the assert functionality to be changed for testing * such that it does not wait infinitely. Use the debugger to disable the * waiting during testing of asserts. */ -int Xil_AssertWait = TRUE; +/*s32 Xil_AssertWait = 1*/ /* The callback function to be invoked when an assert is taken */ static Xil_AssertCallback Xil_AssertCallbackRoutine = NULL; @@ -93,8 +93,9 @@ static Xil_AssertCallback Xil_AssertCallbackRoutine = NULL; * @note None. * ******************************************************************************/ -void Xil_Assert(const char *File, int Line) +void Xil_Assert(const char8 *File, s32 Line) { + s32 Xil_AssertWait = 1; /* if the callback has been set then invoke it */ if (Xil_AssertCallbackRoutine != 0) { (*Xil_AssertCallbackRoutine)(File, Line); @@ -103,7 +104,7 @@ void Xil_Assert(const char *File, int Line) /* if specified, wait indefinitely such that the assert will show up * in testing */ - while (Xil_AssertWait) { + while (Xil_AssertWait != 0) { } } @@ -141,6 +142,5 @@ void Xil_AssertSetCallback(Xil_AssertCallback Routine) ******************************************************************************/ void XNullHandler(void *NullParameter) { - (void) NullParameter; + (void *) NullParameter; } - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_assert.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_assert.h similarity index 93% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_assert.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_assert.h index 47347ad2b..7034bc9ad 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_assert.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_assert.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -49,6 +49,8 @@ #ifndef XIL_ASSERT_H /* prevent circular inclusions */ #define XIL_ASSERT_H /* by using protection macros */ +#include "xil_types.h" + #ifdef __cplusplus extern "C" { #endif @@ -59,19 +61,19 @@ extern "C" { /************************** Constant Definitions *****************************/ -#define XIL_ASSERT_NONE 0 -#define XIL_ASSERT_OCCURRED 1 +#define XIL_ASSERT_NONE 0U +#define XIL_ASSERT_OCCURRED 1U #define XNULL NULL -extern unsigned int Xil_AssertStatus; -extern void Xil_Assert(const char *, int); +extern u32 Xil_AssertStatus; +extern void Xil_Assert(const char8 *File, s32 Line); void XNullHandler(void *NullParameter); /** * This data type defines a callback to be invoked when an * assert occurs. The callback is invoked only when asserts are enabled */ -typedef void (*Xil_AssertCallback) (const char *File, int Line); +typedef void (*Xil_AssertCallback) (const char8 *File, s32 Line); /***************** Macros (Inline Functions) Definitions *********************/ @@ -83,7 +85,7 @@ typedef void (*Xil_AssertCallback) (const char *File, int Line); * (void). This in conjunction with the Xil_AssertWait boolean can be used to * accomodate tests so that asserts which fail allow execution to continue. * -* @param expression is the expression to evaluate. If it evaluates to +* @param Expression is the expression to evaluate. If it evaluates to * false, the assert occurs. * * @return Returns void unless the Xil_AssertWait variable is true, in which @@ -109,7 +111,7 @@ typedef void (*Xil_AssertCallback) (const char *File, int Line); * conjunction with the Xil_AssertWait boolean can be used to accomodate tests * so that asserts which fail allow execution to continue. * -* @param expression is the expression to evaluate. If it evaluates to false, +* @param Expression is the expression to evaluate. If it evaluates to false, * the assert occurs. * * @return Returns 0 unless the Xil_AssertWait variable is true, in which diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_cache.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_cache.c similarity index 97% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_cache.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_cache.c index 4a306c88a..8024b7fdc 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_cache.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_cache.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -92,5 +92,3 @@ void Xil_ICacheDisable(void) Xil_ICacheInvalidate(); Xil_L1ICacheDisable(); } - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_cache.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_cache.h similarity index 95% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_cache.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_cache.h index fb182730e..aa4f79650 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_cache.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_cache.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -133,7 +133,7 @@ extern "C" { * Processor must be in real mode. ****************************************************************************/ #define Xil_L1DCacheInvalidateRange(Addr, Len) \ - microblaze_invalidate_dcache_range(Addr, Len) + microblaze_invalidate_dcache_range((Addr), (Len)) /****************************************************************************/ /** @@ -153,7 +153,7 @@ extern "C" { * Processor must be in real mode. ****************************************************************************/ #define Xil_L2CacheInvalidateRange(Addr, Len) \ - microblaze_invalidate_cache_ext_range(Addr, Len) + microblaze_invalidate_cache_ext_range((Addr), (Len)) /****************************************************************************/ /** @@ -170,10 +170,10 @@ extern "C" { ****************************************************************************/ #if (XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK == 1) # define Xil_L1DCacheFlushRange(Addr, Len) \ - microblaze_flush_dcache_range(Addr, Len) + microblaze_flush_dcache_range((Addr), (Len)) #else # define Xil_L1DCacheFlushRange(Addr, Len) \ - microblaze_invalidate_dcache_range(Addr, Len) + microblaze_invalidate_dcache_range((Addr), (Len)) #endif /* XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK */ /****************************************************************************/ @@ -190,7 +190,7 @@ extern "C" { * ****************************************************************************/ #define Xil_L2CacheFlushRange(Addr, Len) \ - microblaze_flush_cache_ext_range(Addr, Len) + microblaze_flush_cache_ext_range((Addr), (Len)) /****************************************************************************/ /** @@ -232,7 +232,7 @@ extern "C" { * ****************************************************************************/ #define Xil_L1ICacheInvalidateRange(Addr, Len) \ - microblaze_invalidate_icache_range(Addr, Len) + microblaze_invalidate_icache_range((Addr), (Len)) /****************************************************************************/ /** @@ -360,8 +360,8 @@ extern "C" { * ****************************************************************************/ #define Xil_DCacheInvalidateRange(Addr, Len) \ - Xil_L2CacheInvalidateRange(Addr, Len); \ - Xil_L1DCacheInvalidateRange(Addr, Len); + Xil_L2CacheInvalidateRange((Addr), (Len)); \ + Xil_L1DCacheInvalidateRange((Addr), (Len)); /**************************************************************************** @@ -395,8 +395,8 @@ extern "C" { * ****************************************************************************/ #define Xil_DCacheFlushRange(Addr, Len) \ - Xil_L2CacheFlushRange(Addr, Len); \ - Xil_L1DCacheFlushRange(Addr, Len); + Xil_L2CacheFlushRange((Addr), (Len)); \ + Xil_L1DCacheFlushRange((Addr), (Len)); /**************************************************************************** @@ -432,8 +432,8 @@ extern "C" { * ****************************************************************************/ #define Xil_ICacheInvalidateRange(Addr, Len) \ - Xil_L2CacheInvalidateRange(Addr, Len); \ - Xil_L1ICacheInvalidateRange(Addr, Len); + Xil_L2CacheInvalidateRange((Addr), (Len)); \ + Xil_L1ICacheInvalidateRange((Addr), (Len)); void Xil_DCacheDisable(void); void Xil_ICacheDisable(void); diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_cache_vxworks.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_cache_vxworks.h similarity index 97% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_cache_vxworks.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_cache_vxworks.h index 788883878..6e8cfa75f 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_cache_vxworks.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_cache_vxworks.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -91,4 +91,3 @@ extern "C" { #endif #endif - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_exception.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_exception.c similarity index 95% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_exception.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_exception.c index 7fa90d4bc..2c1c47342 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_exception.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_exception.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -55,6 +55,7 @@ #include "xil_exception.h" #include "microblaze_exceptions_g.h" +#include "microblaze_interrupts_i.h" #ifdef __cplusplus extern "C" { @@ -75,10 +76,10 @@ typedef struct { void *CallBackRef; } MB_ExceptionVectorTableEntry; -typedef struct { - Xil_ExceptionHandler Handler; - void *CallBackRef; -} MB_InterruptVectorTableEntry; +/*typedef struct { + Xil_ExceptionHandler Handler, + void *CallBackRef, +} MB_InterruptVectorTableEntry, */ #ifdef __cplusplus } @@ -86,7 +87,7 @@ typedef struct { /************************** Variable Definitions *****************************/ -extern MB_ExceptionVectorTableEntry MB_ExceptionVectorTable[]; +extern MB_ExceptionVectorTableEntry MB_ExceptionVectorTable[XIL_EXCEPTION_ID_INT]; extern MB_InterruptVectorTableEntry MB_InterruptVectorTable; /** @@ -109,7 +110,7 @@ extern MB_InterruptVectorTableEntry MB_InterruptVectorTable; *****************************************************************************/ static void Xil_ExceptionNullHandler(void *Data) { - (void) Data; + (void *) Data; } /****************************************************************************/ @@ -241,4 +242,3 @@ void Xil_ExceptionRemoveHandler(u32 Id) #endif } } - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_exception.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_exception.h similarity index 83% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_exception.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_exception.h index 877d4163d..79418dd01 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_exception.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_exception.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -68,24 +68,24 @@ extern "C" { * These constants are specific to Microblaze processor. */ -#define XIL_EXCEPTION_ID_FIRST 0 -#define XIL_EXCEPTION_ID_FSL 0 -#define XIL_EXCEPTION_ID_UNALIGNED_ACCESS 1 -#define XIL_EXCEPTION_ID_ILLEGAL_OPCODE 2 -#define XIL_EXCEPTION_ID_M_AXI_I_EXCEPTION 3 -#define XIL_EXCEPTION_ID_IPLB_EXCEPTION 3 -#define XIL_EXCEPTION_ID_M_AXI_D_EXCEPTION 4 -#define XIL_EXCEPTION_ID_DPLB_EXCEPTION 4 -#define XIL_EXCEPTION_ID_DIV_BY_ZERO 5 -#define XIL_EXCEPTION_ID_FPU 6 -#define XIL_EXCEPTION_ID_STACK_VIOLATION 7 -#define XIL_EXCEPTION_ID_MMU 7 +#define XIL_EXCEPTION_ID_FIRST 0U +#define XIL_EXCEPTION_ID_FSL 0U +#define XIL_EXCEPTION_ID_UNALIGNED_ACCESS 1U +#define XIL_EXCEPTION_ID_ILLEGAL_OPCODE 2U +#define XIL_EXCEPTION_ID_M_AXI_I_EXCEPTION 3U +#define XIL_EXCEPTION_ID_IPLB_EXCEPTION 3U +#define XIL_EXCEPTION_ID_M_AXI_D_EXCEPTION 4U +#define XIL_EXCEPTION_ID_DPLB_EXCEPTION 4U +#define XIL_EXCEPTION_ID_DIV_BY_ZERO 5U +#define XIL_EXCEPTION_ID_FPU 6U +#define XIL_EXCEPTION_ID_STACK_VIOLATION 7U +#define XIL_EXCEPTION_ID_MMU 7U #define XIL_EXCEPTION_ID_LAST XIL_EXCEPTION_ID_MMU /* * XIL_EXCEPTION_ID_INT is defined for all processors, but with different value. */ -#define XIL_EXCEPTION_ID_INT 16 /** +#define XIL_EXCEPTION_ID_INT 16U /** * exception ID for interrupt */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_hal.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_hal.h similarity index 97% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_hal.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_hal.h index 90626a350..d4434d07f 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_hal.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_hal.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -59,4 +59,3 @@ #include "xil_types.h" #endif - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_io.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_io.c similarity index 88% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_io.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_io.c index e7951019d..a6fd5496e 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_io.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_io.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -44,6 +44,8 @@ * ----- ---- -------- ------------------------------------------------------- * 3.00a hbm 07/28/09 Initial release * 3.00a hbm 07/21/10 Added Xil_EndianSwap32/16, Xil_Htonl/s, Xil_Ntohl/s +* 5.4 sk 01/14/16 Changed xil_io() and xil_out() functions to static inline +* functions. * * * @@ -70,6 +72,7 @@ /************************** Function Prototypes ******************************/ +/***************** Macros (Inline Functions) and Functions Definitions *******/ /*****************************************************************************/ /** @@ -85,7 +88,7 @@ ******************************************************************************/ u16 Xil_EndianSwap16(u16 Data) { - return (u16) (((Data & 0xFF00) >> 8) | ((Data & 0x00FF) << 8)); + return (u16) (((Data & 0xFF00U) >> 8U) | ((Data & 0x00FFU) << 8U)); } /*****************************************************************************/ @@ -107,17 +110,17 @@ u32 Xil_EndianSwap32(u32 Data) /* get each of the half words from the 32 bit word */ - LoWord = (u16) (Data & 0x0000FFFF); - HiWord = (u16) ((Data & 0xFFFF0000) >> 16); + LoWord = (u16) (Data & 0x0000FFFFU); + HiWord = (u16) ((Data & 0xFFFF0000U) >> 16U); /* byte swap each of the 16 bit half words */ - LoWord = (((LoWord & 0xFF00) >> 8) | ((LoWord & 0x00FF) << 8)); - HiWord = (((HiWord & 0xFF00) >> 8) | ((HiWord & 0x00FF) << 8)); + LoWord = (((LoWord & 0xFF00U) >> 8U) | ((LoWord & 0x00FFU) << 8U)); + HiWord = (((HiWord & 0xFF00U) >> 8U) | ((HiWord & 0x00FFU) << 8U)); /* swap the half words before returning the value */ - return (u32) ((LoWord << 16) | HiWord); + return ((((u32)LoWord) << (u32)16U) | (u32)HiWord); } /*****************************************************************************/ @@ -140,9 +143,9 @@ u32 Xil_EndianSwap32(u32 Data) * ******************************************************************************/ #ifndef __LITTLE_ENDIAN__ -u16 Xil_In16LE(u32 Addr) +u16 Xil_In16LE(UINTPTR Addr) #else -u16 Xil_In16BE(u32 Addr) +u16 Xil_In16BE(UINTPTR Addr) #endif { u16 Value; @@ -172,9 +175,9 @@ u16 Xil_In16BE(u32 Addr) * ******************************************************************************/ #ifndef __LITTLE_ENDIAN__ -u32 Xil_In32LE(u32 Addr) +u32 Xil_In32LE(UINTPTR Addr) #else -u32 Xil_In32BE(u32 Addr) +u32 Xil_In32BE(UINTPTR Addr) #endif { u32 InValue; @@ -203,9 +206,9 @@ u32 Xil_In32BE(u32 Addr) * ******************************************************************************/ #ifndef __LITTLE_ENDIAN__ -void Xil_Out16LE(u32 Addr, u16 Value) +void Xil_Out16LE(UINTPTR Addr, u16 Value) #else -void Xil_Out16BE(u32 Addr, u16 Value) +void Xil_Out16BE(UINTPTR Addr, u16 Value) #endif { u16 OutValue; @@ -235,9 +238,9 @@ void Xil_Out16BE(u32 Addr, u16 Value) * ******************************************************************************/ #ifndef __LITTLE_ENDIAN__ -void Xil_Out32LE(u32 Addr, u32 Value) +void Xil_Out32LE(UINTPTR Addr, u32 Value) #else -void Xil_Out32BE(u32 Addr, u32 Value) +void Xil_Out32BE(UINTPTR Addr, u32 Value) #endif { u32 OutValue; diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_io.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_io.h similarity index 82% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_io.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_io.h index bc3020741..fa872b9b7 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_io.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_io.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -47,6 +47,8 @@ * 3.00a hbm 07/21/10 Added Xil_EndianSwap32/16, Xil_Htonl/s, Xil_Ntohl/s * 3.03a sdm 08/18/11 Added INST_SYNC and DATA_SYNC macros. * 3.07a asa 08/31/12 Added xil_printf.h include +* 5.4 sk 01/14/16 Changed xil_io() and xil_out() functions to static inline +* functions. * * * @@ -71,23 +73,17 @@ extern "C" { /************************** Constant Definitions *****************************/ -/**************************** Type Definitions *******************************/ +/**************************** Function Prototypes ****************************/ -/***************** Macros (Inline Functions) Definitions *********************/ +static inline u8 Xil_In8(UINTPTR Addr); +static inline u16 Xil_In16(UINTPTR Addr); +static inline u32 Xil_In32(UINTPTR Addr); -#if defined __GNUC__ -# define INST_SYNC mbar(0) -# define DATA_SYNC mbar(1) -#else -# define INST_SYNC -# define DATA_SYNC -#endif /* __GNUC__ */ +static inline void Xil_Out8(UINTPTR Addr, u8 Value); +static inline void Xil_Out16(UINTPTR Addr, u16 Value); +static inline void Xil_Out32(UINTPTR Addr, u32 Value); -/* - * The following macros allow optimized I/O operations for memory mapped I/O. - * It should be noted that macros cannot be used if synchronization of the I/O - * operation is needed as it will likely break some code. - */ +/***************** Macros (Inline Functions) Definitions *********************/ /*****************************************************************************/ /** @@ -102,7 +98,9 @@ extern "C" { * @note None. * ******************************************************************************/ -#define Xil_In8(Addr) (*(volatile u8 *)(Addr)) +static inline u8 Xil_In8(UINTPTR Addr) { + return *(volatile u8 *)Addr; +} /*****************************************************************************/ /** @@ -117,13 +115,15 @@ extern "C" { * @note None. * ******************************************************************************/ -#define Xil_In16(Addr) (*(volatile u16 *)(Addr)) +static inline u16 Xil_In16(UINTPTR Addr) { + return *(volatile u16 *)Addr; +} /*****************************************************************************/ /** * -* Perform an input operation for a 32-bit memory location by reading from the -* specified address and returning the value read from that address. +* Performs an input operation for a 32-bit memory location by reading from the +* specified address and returning the Value read from that address. * * @param Addr contains the address to perform the input operation at. * @@ -132,7 +132,9 @@ extern "C" { * @note None. * ******************************************************************************/ -#define Xil_In32(Addr) (*(volatile u32 *)(Addr)) +static inline u32 Xil_In32(UINTPTR Addr) { + return *(volatile u32 *)Addr; +} /*****************************************************************************/ @@ -149,8 +151,10 @@ extern "C" { * @note None. * ******************************************************************************/ -#define Xil_Out8(Addr, Value) \ - (*(volatile u8 *)((Addr)) = (Value)) +static inline void Xil_Out8(UINTPTR Addr, u8 Value) { + volatile u8 *LocalAddr = (u8 *)Addr; + *LocalAddr = Value; +} /*****************************************************************************/ /** @@ -166,8 +170,10 @@ extern "C" { * @note None. * ******************************************************************************/ -#define Xil_Out16(Addr, Value) \ - (*(volatile u16 *)((Addr)) = (Value)) +static inline void Xil_Out16(UINTPTR Addr, u16 Value) { + volatile u16 *LocalAddr = (u16 *)Addr; + *LocalAddr = Value; +} /*****************************************************************************/ /** @@ -183,18 +189,35 @@ extern "C" { * @note None. * ******************************************************************************/ -#define Xil_Out32(Addr, Value) \ - (*(volatile u32 *)((Addr)) = (Value)) +static inline void Xil_Out32(UINTPTR Addr, u32 Value) { + volatile u32 *LocalAddr = (u32 *)Addr; + *LocalAddr = Value; +} + +#if defined __GNUC__ +# define INST_SYNC mbar(0) +# define DATA_SYNC mbar(1) +#else +# define INST_SYNC +# define DATA_SYNC +#endif /* __GNUC__ */ + +/* + * The following macros allow optimized I/O operations for memory mapped I/O. + * It should be noted that macros cannot be used if synchronization of the I/O + * operation is needed as it will likely break some code. + */ + extern u16 Xil_EndianSwap16(u16 Data); extern u32 Xil_EndianSwap32(u32 Data); #ifndef __LITTLE_ENDIAN__ -extern u16 Xil_In16LE(u32 Addr); -extern u32 Xil_In32LE(u32 Addr); -extern void Xil_Out16LE(u32 Addr, u16 Value); -extern void Xil_Out32LE(u32 Addr, u32 Value); +extern u16 Xil_In16LE(UINTPTR Addr); +extern u32 Xil_In32LE(UINTPTR Addr); +extern void Xil_Out16LE(UINTPTR Addr, u16 Value); +extern void Xil_Out32LE(UINTPTR Addr, u32 Value); /** * @@ -213,7 +236,7 @@ extern void Xil_Out32LE(u32 Addr, u32 Value); * @note None. * ******************************************************************************/ -#define Xil_In16BE(Addr) Xil_In16(Addr) +#define Xil_In16BE(Addr) Xil_In16((Addr)) /** * @@ -233,7 +256,7 @@ extern void Xil_Out32LE(u32 Addr, u32 Value); * @note None. * ******************************************************************************/ -#define Xil_In32BE(Addr) Xil_In32(Addr) +#define Xil_In32BE(Addr) Xil_In32((Addr)) /*****************************************************************************/ /** @@ -253,7 +276,7 @@ extern void Xil_Out32LE(u32 Addr, u32 Value); * @note None. * ******************************************************************************/ -#define Xil_Out16BE(Addr, Value) Xil_Out16(Addr, Value) +#define Xil_Out16BE(Addr, Value) Xil_Out16((Addr), (Value)) /*****************************************************************************/ /** @@ -272,7 +295,7 @@ extern void Xil_Out32LE(u32 Addr, u32 Value); * @note None. * ******************************************************************************/ -#define Xil_Out32BE(Addr, Value) Xil_Out32(Addr, Value) +#define Xil_Out32BE(Addr, Value) Xil_Out32((Addr), (Value)) #define Xil_Htonl(Data) (Data) #define Xil_Htons(Data) (Data) @@ -281,15 +304,15 @@ extern void Xil_Out32LE(u32 Addr, u32 Value); #else -extern u16 Xil_In16BE(u32 Addr); -extern u32 Xil_In32BE(u32 Addr); -extern void Xil_Out16BE(u32 Addr, u16 Value); -extern void Xil_Out32BE(u32 Addr, u32 Value); +extern u16 Xil_In16BE(UINTPTR Addr); +extern u32 Xil_In32BE(UINTPTR Addr); +extern void Xil_Out16BE(UINTPTR Addr, u16 Value); +extern void Xil_Out32BE(UINTPTR Addr, u32 Value); -#define Xil_In16LE(Addr) Xil_In16(Addr) -#define Xil_In32LE(Addr) Xil_In32(Addr) -#define Xil_Out16LE(Addr, Value) Xil_Out16(Addr, Value) -#define Xil_Out32LE(Addr, Value) Xil_Out32(Addr, Value) +#define Xil_In16LE(Addr) Xil_In16((Addr)) +#define Xil_In32LE(Addr) Xil_In32((Addr)) +#define Xil_Out16LE(Addr, Value) Xil_Out16((Addr), (Value)) +#define Xil_Out32LE(Addr, Value) Xil_Out32((Addr), (Value)) /*****************************************************************************/ @@ -304,7 +327,7 @@ extern void Xil_Out32BE(u32 Addr, u32 Value); * @note None. * ******************************************************************************/ -#define Xil_Htonl(Data) Xil_EndianSwap32(Data) +#define Xil_Htonl(Data) Xil_EndianSwap32((Data)) /*****************************************************************************/ /** @@ -318,7 +341,7 @@ extern void Xil_Out32BE(u32 Addr, u32 Value); * @note None. * ******************************************************************************/ -#define Xil_Htons(Data) Xil_EndianSwap16(Data) +#define Xil_Htons(Data) Xil_EndianSwap16((Data)) /*****************************************************************************/ /** @@ -332,7 +355,7 @@ extern void Xil_Out32BE(u32 Addr, u32 Value); * @note None. * ******************************************************************************/ -#define Xil_Ntohl(Data) Xil_EndianSwap32(Data) +#define Xil_Ntohl(Data) Xil_EndianSwap32((Data)) /*****************************************************************************/ /** @@ -346,7 +369,7 @@ extern void Xil_Out32BE(u32 Addr, u32 Value); * @note None. * ******************************************************************************/ -#define Xil_Ntohs(Data) Xil_EndianSwap16(Data) +#define Xil_Ntohs(Data) Xil_EndianSwap16((Data)) #endif diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_macroback.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_macroback.h similarity index 99% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_macroback.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_macroback.h index c3c468296..ebafde87d 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_macroback.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_macroback.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2010 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2010 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_misc_psreset_api.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_misc_psreset_api.c similarity index 88% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_misc_psreset_api.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_misc_psreset_api.c index 8f742ec5c..ee76cac06 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_misc_psreset_api.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_misc_psreset_api.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2013 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2013 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -45,6 +45,7 @@ * Ver Who Date Changes * ----- ---- -------- ------------------------------------------------------- * 1.00b kpc 03/07/13 First release +* 5.4 pkp 16/11/15 Change the description for XOcm_Remap function * * ******************************************************************************/ @@ -76,15 +77,15 @@ * @note None. * ******************************************************************************/ -void XDdr_ResetHw() +void XDdr_ResetHw(void) { u32 RegVal; - /* Unlock the slcr register access lock */ + /* Unlock the slcr register access lock */ Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Assert and deassert the ddr softreset bit */ RegVal = Xil_In32(XDDRC_CTRL_BASEADDR); - RegVal &= ~XDDRPS_CTRL_RESET_MASK; + RegVal &= (u32)(~XDDRPS_CTRL_RESET_MASK); Xil_Out32(XDDRC_CTRL_BASEADDR,RegVal); RegVal |= XDDRPS_CTRL_RESET_MASK; Xil_Out32(XDDRC_CTRL_BASEADDR,RegVal); @@ -94,6 +95,7 @@ void XDdr_ResetHw() /*****************************************************************************/ /** * This function contains the implementation for remapping the ocm memory region +* to postbootrom state. * * @param N/A. * @@ -102,7 +104,7 @@ void XDdr_ResetHw() * @note None. * ******************************************************************************/ -void XOcm_Remap() +void XOcm_Remap(void) { u32 RegVal; @@ -110,7 +112,7 @@ void XOcm_Remap() Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Map the ocm region to postbootrom state */ RegVal = Xil_In32(XSLCR_OCM_CFG_ADDR); - RegVal = (RegVal & ~XSLCR_OCM_CFG_HIADDR_MASK) | XSLCR_OCM_CFG_RESETVAL; + RegVal = (RegVal & (u32)(~XSLCR_OCM_CFG_HIADDR_MASK)) | (u32)XSLCR_OCM_CFG_RESETVAL; Xil_Out32(XSLCR_OCM_CFG_ADDR, RegVal); } @@ -131,11 +133,11 @@ void XSmc_ResetHw(u32 BaseAddress) /* Clear the interuupts */ RegVal = Xil_In32(BaseAddress + XSMC_MEMC_CLR_CONFIG_OFFSET); - RegVal = RegVal | XSMC_MEMC_CLR_CONFIG_MASK; + RegVal |= XSMC_MEMC_CLR_CONFIG_MASK; Xil_Out32(BaseAddress + XSMC_MEMC_CLR_CONFIG_OFFSET, RegVal); /* Clear the idle counter registers */ - Xil_Out32(BaseAddress + XSMC_REFRESH_PERIOD_0_OFFSET, 0x0); - Xil_Out32(BaseAddress + XSMC_REFRESH_PERIOD_1_OFFSET, 0x0); + Xil_Out32(BaseAddress + XSMC_REFRESH_PERIOD_0_OFFSET, 0x0U); + Xil_Out32(BaseAddress + XSMC_REFRESH_PERIOD_1_OFFSET, 0x0U); /* Update the ecc registers with reset values */ Xil_Out32(BaseAddress + XSMC_ECC_MEMCFG1_OFFSET, XSMC_ECC_MEMCFG1_RESET_VAL); @@ -157,26 +159,26 @@ void XSmc_ResetHw(u32 BaseAddress) * @note None. * ******************************************************************************/ -void XSlcr_MioWriteResetValues() +void XSlcr_MioWriteResetValues(void) { u32 i; /* Unlock the slcr register access lock */ Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Update all the MIO registers with reset values */ - for (i=0; i<=1;i++); + for (i=0U; i<=1U;i++) { - Xil_Out32((XSLCR_MIO_PIN_00_ADDR + (i * 4)), + Xil_Out32((XSLCR_MIO_PIN_00_ADDR + (i * 4U)), XSLCR_MIO_PIN_00_RESET_VAL); } - for (; i<=8;i++); + for (; i<=8U;i++) { - Xil_Out32((XSLCR_MIO_PIN_00_ADDR + (i * 4)), + Xil_Out32((XSLCR_MIO_PIN_00_ADDR + (i * 4U)), XSLCR_MIO_PIN_02_RESET_VAL); } - for (; i<=53 ;i++); + for (; i<=53U ;i++) { - Xil_Out32((XSLCR_MIO_PIN_00_ADDR + (i * 4)), + Xil_Out32((XSLCR_MIO_PIN_00_ADDR + (i * 4U)), XSLCR_MIO_PIN_00_RESET_VAL); } @@ -194,7 +196,7 @@ void XSlcr_MioWriteResetValues() * @note None. * ******************************************************************************/ -void XSlcr_PllWriteResetValues() +void XSlcr_PllWriteResetValues(void) { /* Unlock the slcr register access lock */ @@ -224,14 +226,14 @@ void XSlcr_PllWriteResetValues() * @note None. * ******************************************************************************/ -void XSlcr_DisableLevelShifters() +void XSlcr_DisableLevelShifters(void) { u32 RegVal; /* Unlock the slcr register access lock */ Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Disable the level shifters */ RegVal = Xil_In32(XSLCR_LVL_SHFTR_EN_ADDR); - RegVal = RegVal & ~XSLCR_LVL_SHFTR_EN_MASK; + RegVal = RegVal & (u32)(~XSLCR_LVL_SHFTR_EN_MASK); Xil_Out32(XSLCR_LVL_SHFTR_EN_ADDR, RegVal); } @@ -254,11 +256,11 @@ void XSlcr_OcmReset(void) Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Assert the reset */ RegVal = Xil_In32(XSLCR_OCM_RST_CTRL_ADDR); - RegVal = RegVal | XSLCR_OCM_RST_CTRL_VAL; + RegVal |= XSLCR_OCM_RST_CTRL_VAL; Xil_Out32(XSLCR_OCM_RST_CTRL_ADDR, RegVal); /* Release the reset */ RegVal = Xil_In32(XSLCR_OCM_RST_CTRL_ADDR); - RegVal = RegVal & ~XSLCR_OCM_RST_CTRL_VAL; + RegVal = RegVal & (u32)(~XSLCR_OCM_RST_CTRL_VAL); Xil_Out32(XSLCR_OCM_RST_CTRL_ADDR, RegVal); } @@ -280,11 +282,11 @@ void XSlcr_EmacPsReset(void) Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Assert the reset */ RegVal = Xil_In32(XSLCR_GEM_RST_CTRL_ADDR); - RegVal = RegVal | XSLCR_GEM_RST_CTRL_VAL; + RegVal |= XSLCR_GEM_RST_CTRL_VAL; Xil_Out32(XSLCR_GEM_RST_CTRL_ADDR, RegVal); /* Release the reset */ RegVal = Xil_In32(XSLCR_GEM_RST_CTRL_ADDR); - RegVal = RegVal & ~XSLCR_GEM_RST_CTRL_VAL; + RegVal &= (u32)(~XSLCR_GEM_RST_CTRL_VAL); Xil_Out32(XSLCR_GEM_RST_CTRL_ADDR, RegVal); } @@ -307,11 +309,11 @@ void XSlcr_UsbPsReset(void) Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Assert the reset */ RegVal = Xil_In32(XSLCR_USB_RST_CTRL_ADDR); - RegVal = RegVal | XSLCR_USB_RST_CTRL_VAL; + RegVal |= XSLCR_USB_RST_CTRL_VAL; Xil_Out32(XSLCR_USB_RST_CTRL_ADDR, RegVal); /* Release the reset */ RegVal = Xil_In32(XSLCR_USB_RST_CTRL_ADDR); - RegVal = RegVal & ~XSLCR_USB_RST_CTRL_VAL; + RegVal = RegVal & (u32)(~XSLCR_USB_RST_CTRL_VAL); Xil_Out32(XSLCR_USB_RST_CTRL_ADDR, RegVal); } /*****************************************************************************/ @@ -333,11 +335,11 @@ void XSlcr_QspiPsReset(void) Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Assert the reset */ RegVal = Xil_In32(XSLCR_LQSPI_RST_CTRL_ADDR); - RegVal = RegVal | XSLCR_QSPI_RST_CTRL_VAL; + RegVal |= XSLCR_QSPI_RST_CTRL_VAL; Xil_Out32(XSLCR_LQSPI_RST_CTRL_ADDR, RegVal); /* Release the reset */ RegVal = Xil_In32(XSLCR_LQSPI_RST_CTRL_ADDR); - RegVal = RegVal & ~XSLCR_QSPI_RST_CTRL_VAL; + RegVal = RegVal & (u32)(~XSLCR_QSPI_RST_CTRL_VAL); Xil_Out32(XSLCR_LQSPI_RST_CTRL_ADDR, RegVal); } /*****************************************************************************/ @@ -359,11 +361,11 @@ void XSlcr_SpiPsReset(void) Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Assert the reset */ RegVal = Xil_In32(XSLCR_SPI_RST_CTRL_ADDR); - RegVal = RegVal | XSLCR_SPI_RST_CTRL_VAL; + RegVal |= XSLCR_SPI_RST_CTRL_VAL; Xil_Out32(XSLCR_SPI_RST_CTRL_ADDR, RegVal); /* Release the reset */ RegVal = Xil_In32(XSLCR_SPI_RST_CTRL_ADDR); - RegVal = RegVal & ~XSLCR_SPI_RST_CTRL_VAL; + RegVal = RegVal & (u32)(~XSLCR_SPI_RST_CTRL_VAL); Xil_Out32(XSLCR_SPI_RST_CTRL_ADDR, RegVal); } /*****************************************************************************/ @@ -384,11 +386,11 @@ void XSlcr_I2cPsReset(void) Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Assert the reset */ RegVal = Xil_In32(XSLCR_I2C_RST_CTRL_ADDR); - RegVal = RegVal | XSLCR_I2C_RST_CTRL_VAL; + RegVal |= XSLCR_I2C_RST_CTRL_VAL; Xil_Out32(XSLCR_I2C_RST_CTRL_ADDR, RegVal); /* Release the reset */ RegVal = Xil_In32(XSLCR_I2C_RST_CTRL_ADDR); - RegVal = RegVal & ~XSLCR_I2C_RST_CTRL_VAL; + RegVal = RegVal & (u32)(~XSLCR_I2C_RST_CTRL_VAL); Xil_Out32(XSLCR_I2C_RST_CTRL_ADDR, RegVal); } /*****************************************************************************/ @@ -410,11 +412,11 @@ void XSlcr_UartPsReset(void) Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Assert the reset */ RegVal = Xil_In32(XSLCR_UART_RST_CTRL_ADDR); - RegVal = RegVal | XSLCR_UART_RST_CTRL_VAL; + RegVal |= XSLCR_UART_RST_CTRL_VAL; Xil_Out32(XSLCR_UART_RST_CTRL_ADDR, RegVal); /* Release the reset */ RegVal = Xil_In32(XSLCR_UART_RST_CTRL_ADDR); - RegVal = RegVal & ~XSLCR_UART_RST_CTRL_VAL; + RegVal = RegVal & (u32)(~XSLCR_UART_RST_CTRL_VAL); Xil_Out32(XSLCR_UART_RST_CTRL_ADDR, RegVal); } /*****************************************************************************/ @@ -436,11 +438,11 @@ void XSlcr_CanPsReset(void) Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Assert the reset */ RegVal = Xil_In32(XSLCR_CAN_RST_CTRL_ADDR); - RegVal = RegVal | XSLCR_CAN_RST_CTRL_VAL; + RegVal |= XSLCR_CAN_RST_CTRL_VAL; Xil_Out32(XSLCR_CAN_RST_CTRL_ADDR, RegVal); /* Release the reset */ RegVal = Xil_In32(XSLCR_CAN_RST_CTRL_ADDR); - RegVal = RegVal & ~XSLCR_CAN_RST_CTRL_VAL; + RegVal = RegVal & (u32)(~XSLCR_CAN_RST_CTRL_VAL); Xil_Out32(XSLCR_CAN_RST_CTRL_ADDR, RegVal); } /*****************************************************************************/ @@ -461,11 +463,11 @@ void XSlcr_SmcPsReset(void) Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Assert the reset */ RegVal = Xil_In32(XSLCR_SMC_RST_CTRL_ADDR); - RegVal = RegVal | XSLCR_SMC_RST_CTRL_VAL; + RegVal |= XSLCR_SMC_RST_CTRL_VAL; Xil_Out32(XSLCR_SMC_RST_CTRL_ADDR, RegVal); /* Release the reset */ RegVal = Xil_In32(XSLCR_SMC_RST_CTRL_ADDR); - RegVal = RegVal & ~XSLCR_SMC_RST_CTRL_VAL; + RegVal = RegVal & (u32)(~XSLCR_SMC_RST_CTRL_VAL); Xil_Out32(XSLCR_SMC_RST_CTRL_ADDR, RegVal); } /*****************************************************************************/ @@ -487,11 +489,11 @@ void XSlcr_DmaPsReset(void) Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Assert the reset */ RegVal = Xil_In32(XSLCR_DMAC_RST_CTRL_ADDR); - RegVal = RegVal | XSLCR_DMAC_RST_CTRL_VAL; + RegVal |= XSLCR_DMAC_RST_CTRL_VAL; Xil_Out32(XSLCR_DMAC_RST_CTRL_ADDR, RegVal); /* Release the reset */ RegVal = Xil_In32(XSLCR_DMAC_RST_CTRL_ADDR); - RegVal = RegVal & ~XSLCR_DMAC_RST_CTRL_VAL; + RegVal = RegVal & (u32)(~XSLCR_DMAC_RST_CTRL_VAL); Xil_Out32(XSLCR_DMAC_RST_CTRL_ADDR, RegVal); } /*****************************************************************************/ @@ -513,10 +515,10 @@ void XSlcr_GpioPsReset(void) Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE); /* Assert the reset */ RegVal = Xil_In32(XSLCR_GPIO_RST_CTRL_ADDR); - RegVal = RegVal | XSLCR_GPIO_RST_CTRL_VAL; + RegVal |= XSLCR_GPIO_RST_CTRL_VAL; Xil_Out32(XSLCR_GPIO_RST_CTRL_ADDR, RegVal); /* Release the reset */ RegVal = Xil_In32(XSLCR_GPIO_RST_CTRL_ADDR); - RegVal = RegVal & ~XSLCR_GPIO_RST_CTRL_VAL; + RegVal = RegVal & (u32)(~XSLCR_GPIO_RST_CTRL_VAL); Xil_Out32(XSLCR_GPIO_RST_CTRL_ADDR, RegVal); -} \ No newline at end of file +} diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_misc_psreset_api.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_misc_psreset_api.h similarity index 59% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_misc_psreset_api.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_misc_psreset_api.h index 073ed3279..234d9bebf 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_misc_psreset_api.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_misc_psreset_api.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2013 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2013 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -58,137 +58,137 @@ extern "C" { #include "xil_io.h" /************************** Constant Definitions *****************************/ -#define XDDRC_CTRL_BASEADDR 0xF8006000 -#define XSLCR_BASEADDR 0xF8000000 +#define XDDRC_CTRL_BASEADDR 0xF8006000U +#define XSLCR_BASEADDR 0xF8000000U /**< OCM configuration register */ -#define XSLCR_OCM_CFG_ADDR (XSLCR_BASEADDR + 0x910) +#define XSLCR_OCM_CFG_ADDR (XSLCR_BASEADDR + 0x00000910U) /**< SLCR unlock register */ -#define XSLCR_UNLOCK_ADDR (XSLCR_BASEADDR + 0x8) +#define XSLCR_UNLOCK_ADDR (XSLCR_BASEADDR + 0x00000008U) /**< SLCR GEM0 rx clock control register */ -#define XSLCR_GEM0_RCLK_CTRL_ADDR (XSLCR_BASEADDR + 0x138) +#define XSLCR_GEM0_RCLK_CTRL_ADDR (XSLCR_BASEADDR + 0x00000138U) /**< SLCR GEM1 rx clock control register */ -#define XSLCR_GEM1_RCLK_CTRL_ADDR (XSLCR_BASEADDR + 0x13C) +#define XSLCR_GEM1_RCLK_CTRL_ADDR (XSLCR_BASEADDR + 0x0000013CU) /**< SLCR GEM0 clock control register */ -#define XSLCR_GEM0_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x140) +#define XSLCR_GEM0_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x00000140U) /**< SLCR GEM1 clock control register */ -#define XSLCR_GEM1_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x144) +#define XSLCR_GEM1_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x00000144U) /**< SLCR SMC clock control register */ -#define XSLCR_SMC_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x148) +#define XSLCR_SMC_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x00000148U) /**< SLCR GEM reset control register */ -#define XSLCR_GEM_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x214) +#define XSLCR_GEM_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x00000214U) /**< SLCR USB0 clock control register */ -#define XSLCR_USB0_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x130) +#define XSLCR_USB0_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x00000130U) /**< SLCR USB1 clock control register */ -#define XSLCR_USB1_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x134) +#define XSLCR_USB1_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x00000134U) /**< SLCR USB1 reset control register */ -#define XSLCR_USB_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x210) +#define XSLCR_USB_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x00000210U) /**< SLCR SMC reset control register */ -#define XSLCR_SMC_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x234) +#define XSLCR_SMC_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x00000234U) /**< SLCR Level shifter enable register */ -#define XSLCR_LVL_SHFTR_EN_ADDR (XSLCR_BASEADDR + 0x900) +#define XSLCR_LVL_SHFTR_EN_ADDR (XSLCR_BASEADDR + 0x00000900U) /**< SLCR ARM pll control register */ -#define XSLCR_ARM_PLL_CTRL_ADDR (XSLCR_BASEADDR + 0x100) +#define XSLCR_ARM_PLL_CTRL_ADDR (XSLCR_BASEADDR + 0x00000100U) /**< SLCR DDR pll control register */ -#define XSLCR_DDR_PLL_CTRL_ADDR (XSLCR_BASEADDR + 0x104) +#define XSLCR_DDR_PLL_CTRL_ADDR (XSLCR_BASEADDR + 0x00000104U) /**< SLCR IO pll control register */ -#define XSLCR_IO_PLL_CTRL_ADDR (XSLCR_BASEADDR + 0x108) +#define XSLCR_IO_PLL_CTRL_ADDR (XSLCR_BASEADDR + 0x00000108U) /**< SLCR ARM pll configuration register */ -#define XSLCR_ARM_PLL_CFG_ADDR (XSLCR_BASEADDR + 0x110) +#define XSLCR_ARM_PLL_CFG_ADDR (XSLCR_BASEADDR + 0x00000110U) /**< SLCR DDR pll configuration register */ -#define XSLCR_DDR_PLL_CFG_ADDR (XSLCR_BASEADDR + 0x114) +#define XSLCR_DDR_PLL_CFG_ADDR (XSLCR_BASEADDR + 0x00000114U) /**< SLCR IO pll configuration register */ -#define XSLCR_IO_PLL_CFG_ADDR (XSLCR_BASEADDR + 0x118) +#define XSLCR_IO_PLL_CFG_ADDR (XSLCR_BASEADDR + 0x00000118U) /**< SLCR ARM clock control register */ -#define XSLCR_ARM_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x120) +#define XSLCR_ARM_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x00000120U) /**< SLCR DDR clock control register */ -#define XSLCR_DDR_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x124) +#define XSLCR_DDR_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x00000124U) /**< SLCR MIO pin address register */ -#define XSLCR_MIO_PIN_00_ADDR (XSLCR_BASEADDR + 0x700) +#define XSLCR_MIO_PIN_00_ADDR (XSLCR_BASEADDR + 0x00000700U) /**< SLCR DMAC reset control address register */ -#define XSLCR_DMAC_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x20C) +#define XSLCR_DMAC_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x0000020CU) /**< SLCR USB reset control address register */ -#define XSLCR_USB_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x210) +/*#define XSLCR_USB_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x00000210U)*/ /**< SLCR GEM reset control address register */ -#define XSLCR_GEM_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x214) +/*#define XSLCR_GEM_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x00000214U)*/ /**< SLCR SDIO reset control address register */ -#define XSLCR_SDIO_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x218) +#define XSLCR_SDIO_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x00000218U) /**< SLCR SPI reset control address register */ -#define XSLCR_SPI_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x21C) +#define XSLCR_SPI_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x0000021CU) /**< SLCR CAN reset control address register */ -#define XSLCR_CAN_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x220) +#define XSLCR_CAN_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x00000220U) /**< SLCR I2C reset control address register */ -#define XSLCR_I2C_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x224) +#define XSLCR_I2C_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x00000224U) /**< SLCR UART reset control address register */ -#define XSLCR_UART_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x228) +#define XSLCR_UART_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x00000228U) /**< SLCR GPIO reset control address register */ -#define XSLCR_GPIO_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x22C) +#define XSLCR_GPIO_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x0000022CU) /**< SLCR LQSPI reset control address register */ -#define XSLCR_LQSPI_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x230) +#define XSLCR_LQSPI_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x00000230U) /**< SLCR SMC reset control address register */ -#define XSLCR_SMC_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x234) +/*#define XSLCR_SMC_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x00000234U)*/ /**< SLCR OCM reset control address register */ -#define XSLCR_OCM_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x238) +#define XSLCR_OCM_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x00000238U) /**< SMC mem controller clear config register */ -#define XSMC_MEMC_CLR_CONFIG_OFFSET 0x0C +#define XSMC_MEMC_CLR_CONFIG_OFFSET 0x0000000CU /**< SMC idlecount configuration register */ -#define XSMC_REFRESH_PERIOD_0_OFFSET 0x20 -#define XSMC_REFRESH_PERIOD_1_OFFSET 0x24 +#define XSMC_REFRESH_PERIOD_0_OFFSET 0x00000020U +#define XSMC_REFRESH_PERIOD_1_OFFSET 0x00000024U /**< SMC ECC configuration register */ -#define XSMC_ECC_MEMCFG1_OFFSET 0x404 +#define XSMC_ECC_MEMCFG1_OFFSET 0x00000404U /**< SMC ECC command 1 register */ -#define XSMC_ECC_MEMCMD1_OFFSET 0x404 +#define XSMC_ECC_MEMCMD1_OFFSET 0x00000404U /**< SMC ECC command 2 register */ -#define XSMC_ECC_MEMCMD2_OFFSET 0x404 +#define XSMC_ECC_MEMCMD2_OFFSET 0x00000404U /**< SLCR unlock code */ -#define XSLCR_UNLOCK_CODE 0x0000DF0D +#define XSLCR_UNLOCK_CODE 0x0000DF0DU /**< SMC mem clear configuration mask */ -#define XSMC_MEMC_CLR_CONFIG_MASK 0x5F +#define XSMC_MEMC_CLR_CONFIG_MASK 0x0000005FU /**< SMC ECC memconfig 1 reset value */ -#define XSMC_ECC_MEMCFG1_RESET_VAL 0x43 +#define XSMC_ECC_MEMCFG1_RESET_VAL 0x00000043U /**< SMC ECC memcommand 1 reset value */ -#define XSMC_ECC_MEMCMD1_RESET_VAL 0x01300080 +#define XSMC_ECC_MEMCMD1_RESET_VAL 0x01300080U /**< SMC ECC memcommand 2 reset value */ -#define XSMC_ECC_MEMCMD2_RESET_VAL 0x01E00585 +#define XSMC_ECC_MEMCMD2_RESET_VAL 0x01E00585U /**< DDR controller reset bit mask */ -#define XDDRPS_CTRL_RESET_MASK 0x1 +#define XDDRPS_CTRL_RESET_MASK 0x00000001U /**< SLCR OCM configuration reset value*/ -#define XSLCR_OCM_CFG_RESETVAL 0x8 +#define XSLCR_OCM_CFG_RESETVAL 0x00000008U /**< SLCR OCM bank selection mask*/ -#define XSLCR_OCM_CFG_HIADDR_MASK 0xF +#define XSLCR_OCM_CFG_HIADDR_MASK 0x0000000FU /**< SLCR level shifter enable mask*/ -#define XSLCR_LVL_SHFTR_EN_MASK 0xF +#define XSLCR_LVL_SHFTR_EN_MASK 0x0000000FU /**< SLCR PLL register reset values */ -#define XSLCR_ARM_PLL_CTRL_RESET_VAL 0x0001A008 -#define XSLCR_DDR_PLL_CTRL_RESET_VAL 0x0001A008 -#define XSLCR_IO_PLL_CTRL_RESET_VAL 0x0001A008 -#define XSLCR_ARM_PLL_CFG_RESET_VAL 0x00177EA0 -#define XSLCR_DDR_PLL_CFG_RESET_VAL 0x00177EA0 -#define XSLCR_IO_PLL_CFG_RESET_VAL 0x00177EA0 -#define XSLCR_ARM_CLK_CTRL_RESET_VAL 0x1F000400 -#define XSLCR_DDR_CLK_CTRL_RESET_VAL 0x18400003 +#define XSLCR_ARM_PLL_CTRL_RESET_VAL 0x0001A008U +#define XSLCR_DDR_PLL_CTRL_RESET_VAL 0x0001A008U +#define XSLCR_IO_PLL_CTRL_RESET_VAL 0x0001A008U +#define XSLCR_ARM_PLL_CFG_RESET_VAL 0x00177EA0U +#define XSLCR_DDR_PLL_CFG_RESET_VAL 0x00177EA0U +#define XSLCR_IO_PLL_CFG_RESET_VAL 0x00177EA0U +#define XSLCR_ARM_CLK_CTRL_RESET_VAL 0x1F000400U +#define XSLCR_DDR_CLK_CTRL_RESET_VAL 0x18400003U /**< SLCR MIO register default values */ -#define XSLCR_MIO_PIN_00_RESET_VAL 0x00001601 -#define XSLCR_MIO_PIN_02_RESET_VAL 0x00000601 +#define XSLCR_MIO_PIN_00_RESET_VAL 0x00001601U +#define XSLCR_MIO_PIN_02_RESET_VAL 0x00000601U /**< SLCR Reset control registers default values */ -#define XSLCR_DMAC_RST_CTRL_VAL 0x1 -#define XSLCR_GEM_RST_CTRL_VAL 0xF3 -#define XSLCR_USB_RST_CTRL_VAL 0x3 -#define XSLCR_I2C_RST_CTRL_VAL 0x3 -#define XSLCR_SPI_RST_CTRL_VAL 0xF -#define XSLCR_UART_RST_CTRL_VAL 0xF -#define XSLCR_QSPI_RST_CTRL_VAL 0x3 -#define XSLCR_GPIO_RST_CTRL_VAL 0x1 -#define XSLCR_SMC_RST_CTRL_VAL 0x3 -#define XSLCR_OCM_RST_CTRL_VAL 0x1 -#define XSLCR_SDIO_RST_CTRL_VAL 0x33 -#define XSLCR_CAN_RST_CTRL_VAL 0x3 +#define XSLCR_DMAC_RST_CTRL_VAL 0x00000001U +#define XSLCR_GEM_RST_CTRL_VAL 0x000000F3U +#define XSLCR_USB_RST_CTRL_VAL 0x00000003U +#define XSLCR_I2C_RST_CTRL_VAL 0x00000003U +#define XSLCR_SPI_RST_CTRL_VAL 0x0000000FU +#define XSLCR_UART_RST_CTRL_VAL 0x0000000FU +#define XSLCR_QSPI_RST_CTRL_VAL 0x00000003U +#define XSLCR_GPIO_RST_CTRL_VAL 0x00000001U +#define XSLCR_SMC_RST_CTRL_VAL 0x00000003U +#define XSLCR_OCM_RST_CTRL_VAL 0x00000001U +#define XSLCR_SDIO_RST_CTRL_VAL 0x00000033U +#define XSLCR_CAN_RST_CTRL_VAL 0x00000003U /**************************** Type Definitions *******************************/ /* the following data type is used to hold a null terminated version string @@ -203,11 +203,11 @@ extern "C" { /* * Performs reset operation to the ddr interface */ -void XDdr_ResetHw(); +void XDdr_ResetHw(void); /* * Map the ocm region to post bootrom state */ -void XOcm_Remap(); +void XOcm_Remap(void); /* * Performs the smc interface reset */ @@ -215,15 +215,15 @@ void XSmc_ResetHw(u32 BaseAddress); /* * updates the MIO registers with reset values */ -void XSlcr_MioWriteResetValues(); +void XSlcr_MioWriteResetValues(void); /* * updates the PLL and clock registers with reset values */ -void XSlcr_PllWriteResetValues(); +void XSlcr_PllWriteResetValues(void); /* * Disables the level shifters */ -void XSlcr_DisableLevelShifters(); +void XSlcr_DisableLevelShifters(void); /* * provides softreset to the GPIO interface */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_printf.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_printf.c new file mode 100644 index 000000000..0f0db4fc9 --- /dev/null +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_printf.c @@ -0,0 +1,360 @@ +/*---------------------------------------------------*/ +/* Modified from : */ +/* Public Domain version of printf */ +/* Rud Merriam, Compsult, Inc. Houston, Tx. */ +/* For Embedded Systems Programming, 1991 */ +/* */ +/*---------------------------------------------------*/ +#include "xil_printf.h" +#include "xil_types.h" +#include "xil_assert.h" +#include +#include +#include + +static void padding( const s32 l_flag,const struct params_s *par); +static void outs(const charptr lp, struct params_s *par); +static s32 getnum( charptr* linep); + +typedef struct params_s { + s32 len; + s32 num1; + s32 num2; + char8 pad_character; + s32 do_padding; + s32 left_flag; + s32 unsigned_flag; +} params_t; + + +/*---------------------------------------------------*/ +/* The purpose of this routine is to output data the */ +/* same as the standard printf function without the */ +/* overhead most run-time libraries involve. Usually */ +/* the printf brings in many kilobytes of code and */ +/* that is unacceptable in most embedded systems. */ +/*---------------------------------------------------*/ + + +/*---------------------------------------------------*/ +/* */ +/* This routine puts pad characters into the output */ +/* buffer. */ +/* */ +static void padding( const s32 l_flag, const struct params_s *par) +{ + s32 i; + + if ((par->do_padding != 0) && (l_flag != 0) && (par->len < par->num1)) { + i=(par->len); + for (; i<(par->num1); i++) { +#ifdef STDOUT_BASEADDRESS + outbyte( par->pad_character); +#endif + } + } +} + +/*---------------------------------------------------*/ +/* */ +/* This routine moves a string to the output buffer */ +/* as directed by the padding and positioning flags. */ +/* */ +static void outs(const charptr lp, struct params_s *par) +{ + charptr LocalPtr; + LocalPtr = lp; + /* pad on left if needed */ + if(LocalPtr != NULL) { + par->len = (s32)strlen( LocalPtr); + } + padding( !(par->left_flag), par); + + /* Move string to the buffer */ + while (((*LocalPtr) != (char8)0) && ((par->num2) != 0)) { + (par->num2)--; +#ifdef STDOUT_BASEADDRESS + outbyte(*LocalPtr); + LocalPtr += 1; +#endif +} + + /* Pad on right if needed */ + /* CR 439175 - elided next stmt. Seemed bogus. */ + /* par->len = strlen( lp) */ + padding( par->left_flag, par); +} + +/*---------------------------------------------------*/ +/* */ +/* This routine moves a number to the output buffer */ +/* as directed by the padding and positioning flags. */ +/* */ + +static void outnum( const s32 n, const s32 base, struct params_s *par) +{ + charptr cp; + s32 negative; + s32 i; + char8 outbuf[32]; + const char8 digits[] = "0123456789ABCDEF"; + u32 num; + for(i = 0; i<32; i++) { + outbuf[i] = '0'; + } + + /* Check if number is negative */ + if ((par->unsigned_flag == 0) && (base == 10) && (n < 0L)) { + negative = 1; + num =(-(n)); + } + else{ + num = n; + negative = 0; + } + + /* Build number (backwards) in outbuf */ + i = 0; + do { + outbuf[i] = digits[(num % base)]; + i++; + num /= base; + } while (num > 0); + + if (negative != 0) { + outbuf[i] = '-'; + i++; + } + + outbuf[i] = 0; + i--; + + /* Move the converted number to the buffer and */ + /* add in the padding where needed. */ + par->len = (s32)strlen(outbuf); + padding( !(par->left_flag), par); + while (&outbuf[i] >= outbuf) { +#ifdef STDOUT_BASEADDRESS + outbyte( outbuf[i] ); + i--; +#endif +} + padding( par->left_flag, par); +} + +/*---------------------------------------------------*/ +/* */ +/* This routine gets a number from the format */ +/* string. */ +/* */ +static s32 getnum( charptr* linep) +{ + s32 n; + s32 ResultIsDigit = 0; + charptr cptr; + n = 0; + cptr = *linep; + if(cptr != NULL){ + ResultIsDigit = isdigit(((s32)*cptr)); + } + while (ResultIsDigit != 0) { + if(cptr != NULL){ + n = ((n*10) + (((s32)*cptr) - (s32)'0')); + cptr += 1; + if(cptr != NULL){ + ResultIsDigit = isdigit(((s32)*cptr)); + } + } + ResultIsDigit = isdigit(((s32)*cptr)); + } + *linep = ((charptr )(cptr)); + return(n); +} + +/*---------------------------------------------------*/ +/* */ +/* This routine operates just like a printf/sprintf */ +/* routine. It outputs a set of data under the */ +/* control of a formatting string. Not all of the */ +/* standard C format control are supported. The ones */ +/* provided are primarily those needed for embedded */ +/* systems work. Primarily the floating point */ +/* routines are omitted. Other formats could be */ +/* added easily by following the examples shown for */ +/* the supported formats. */ +/* */ + +/* void esp_printf( const func_ptr f_ptr, + const charptr ctrl1, ...) */ +void xil_printf( const char8 *ctrl1, ...) +{ + s32 Check; + s32 long_flag; + s32 dot_flag; + + params_t par; + + char8 ch; + va_list argp; + char8 *ctrl = (char8 *)ctrl1; + + va_start( argp, ctrl1); + + while ((ctrl != NULL) && (*ctrl != (char8)0)) { + + /* move format string chars to buffer until a */ + /* format control is found. */ + if (*ctrl != '%') { +#ifdef STDOUT_BASEADDRESS + outbyte(*ctrl); + ctrl += 1; +#endif + continue; + } + + /* initialize all the flags for this format. */ + dot_flag = 0; + long_flag = 0; + par.unsigned_flag = 0; + par.left_flag = 0; + par.do_padding = 0; + par.pad_character = ' '; + par.num2=32767; + par.num1=0; + par.len=0; + + try_next: + if(ctrl != NULL) { + ctrl += 1; + } + if(ctrl != NULL) { + ch = *ctrl; + } + else { + ch = *ctrl; + } + + if (isdigit((s32)ch) != 0) { + if (dot_flag != 0) { + par.num2 = getnum(&ctrl); + } + else { + if (ch == '0') { + par.pad_character = '0'; + } + if(ctrl != NULL) { + par.num1 = getnum(&ctrl); + } + par.do_padding = 1; + } + if(ctrl != NULL) { + ctrl -= 1; + } + goto try_next; + } + + switch (tolower((s32)ch)) { + case '%': +#ifdef STDOUT_BASEADDRESS + outbyte( '%'); +#endif + Check = 1; + break; + + case '-': + par.left_flag = 1; + Check = 0; + break; + + case '.': + dot_flag = 1; + Check = 0; + break; + + case 'l': + long_flag = 1; + Check = 0; + break; + + case 'u': + par.unsigned_flag = 1; + /* fall through */ + case 'i': + case 'd': + if ((long_flag != 0) || (ch == 'D')) { + outnum( va_arg(argp, s32), 10L, &par); + } + else { + outnum( va_arg(argp, s32), 10L, &par); + } + Check = 1; + break; + case 'p': + case 'X': + case 'x': + par.unsigned_flag = 1; + outnum((s32)va_arg(argp, s32), 16L, &par); + Check = 1; + break; + + case 's': + outs( va_arg( argp, char *), &par); + Check = 1; + break; + + case 'c': +#ifdef STDOUT_BASEADDRESS + outbyte( va_arg( argp, s32)); +#endif + Check = 1; + break; + + case '\\': + switch (*ctrl) { + case 'a': +#ifdef STDOUT_BASEADDRESS + outbyte( ((char8)0x07)); +#endif + break; + case 'h': +#ifdef STDOUT_BASEADDRESS + outbyte( ((char8)0x08)); +#endif + break; + case 'r': +#ifdef STDOUT_BASEADDRESS + outbyte( ((char8)0x0D)); +#endif + break; + case 'n': +#ifdef STDOUT_BASEADDRESS + outbyte( ((char8)0x0D)); + outbyte( ((char8)0x0A)); +#endif + break; + default: +#ifdef STDOUT_BASEADDRESS + outbyte( *ctrl); +#endif + break; + } + ctrl += 1; + Check = 0; + break; + + default: + Check = 1; + break; + } + if(Check == 1) { + if(ctrl != NULL) { + ctrl += 1; + } + continue; + } + goto try_next; + } + va_end( argp); +} + +/*---------------------------------------------------*/ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_printf.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_printf.h similarity index 62% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_printf.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_printf.h index d928da4e7..ee307bca8 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_printf.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_printf.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2012 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2012 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -36,8 +36,36 @@ extern "C" { #endif -void xil_printf(const char *ctrl1, ...); -void print(char *ptr); +#include +#include +#include +#include "xil_types.h" +#include "xparameters.h" + +/*----------------------------------------------------*/ +/* Use the following parameter passing structure to */ +/* make xil_printf re-entrant. */ +/*----------------------------------------------------*/ + +struct params_s; + + +/*---------------------------------------------------*/ +/* The purpose of this routine is to output data the */ +/* same as the standard printf function without the */ +/* overhead most run-time libraries involve. Usually */ +/* the printf brings in many kilobytes of code and */ +/* that is unacceptable in most embedded systems. */ +/*---------------------------------------------------*/ + +typedef char8* charptr; +typedef s32 (*func_ptr)(int c); + +/* */ + +void xil_printf( const char8 *ctrl1, ...); +void print(const char8 *ptr); +void outbyte(char c); #ifdef __cplusplus } diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testcache.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testcache.c similarity index 53% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testcache.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testcache.c index 6e313dbef..a2c4b0bbf 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testcache.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testcache.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -51,19 +51,27 @@ * This file contain functions that all operate on HAL. * ******************************************************************************/ +#ifdef __ARM__ #include "xil_cache.h" #include "xil_testcache.h" +#include "xil_types.h" +#include "xpseudo_asm.h" +#ifdef __aarch64__ +#include "xreg_cortexa53.h" +#else +#include "xreg_cortexr5.h" +#endif -extern void xil_printf(const char *ctrl1, ...); +#include "xil_types.h" + +extern void xil_printf(const char8 *ctrl1, ...); #define DATA_LENGTH 128 -#ifdef __GNUC__ -static u32 Data[DATA_LENGTH] __attribute__ ((aligned(32))); -#elif defined (__ICCARM__) -static u32 Data[DATA_LENGTH]; +#ifdef __aarch64__ +static INTPTR Data[DATA_LENGTH] __attribute__ ((aligned(64))); #else -static u32 Data[DATA_LENGTH] __attribute__ ((aligned(32))); +static INTPTR Data[DATA_LENGTH] __attribute__ ((aligned(32))); #endif /** @@ -77,51 +85,121 @@ static u32 Data[DATA_LENGTH] __attribute__ ((aligned(32))); * - 0 is returned for a pass * - -1 is returned for a failure */ -int Xil_TestDCacheRange(void) +s32 Xil_TestDCacheRange(void) { - int Index; - int Status; - - u32 Value; + s32 Index; + s32 Status = 0; + u32 CtrlReg; + INTPTR Value; xil_printf("-- Cache Range Test --\n\r"); - for (Index = 0; Index < DATA_LENGTH; Index++) Data[Index] = 0xA0A00505; xil_printf(" initialize Data done:\r\n"); - Xil_DCacheFlushRange((u32)Data, DATA_LENGTH * sizeof(u32)); + Xil_DCacheFlushRange((INTPTR)Data, DATA_LENGTH * sizeof(INTPTR)); xil_printf(" flush range done\r\n"); + + dsb(); + #ifdef __aarch64__ + CtrlReg = mfcp(SCTLR_EL3); + CtrlReg &= ~(XREG_CONTROL_DCACHE_BIT); + mtcp(SCTLR_EL3,CtrlReg); + #else + CtrlReg = mfcp(XREG_CP15_SYS_CONTROL); + CtrlReg &= ~(XREG_CP15_CONTROL_C_BIT); + mtcp(XREG_CP15_SYS_CONTROL, CtrlReg); + #endif + dsb(); + + Status = 0; + + for (Index = 0; Index < DATA_LENGTH; Index++) { + Value = Data[Index]; + if (Value != 0xA0A00505) { + Status = -1; + xil_printf("Data[%d] = %x\r\n", Index, Value); + break; + } + } + + if (!Status) { + xil_printf(" Flush worked\r\n"); + } + else { + xil_printf("Error: flush dcache range not working\r\n"); + } + dsb(); + #ifdef __aarch64__ + CtrlReg = mfcp(SCTLR_EL3); + CtrlReg |= (XREG_CONTROL_DCACHE_BIT); + mtcp(SCTLR_EL3,CtrlReg); + #else + CtrlReg = mfcp(XREG_CP15_SYS_CONTROL); + CtrlReg |= (XREG_CP15_CONTROL_C_BIT); + mtcp(XREG_CP15_SYS_CONTROL, CtrlReg); + #endif + dsb(); + for (Index = 0; Index < DATA_LENGTH; Index++) + Data[Index] = 0xA0A0C505; + + + + Xil_DCacheFlushRange((INTPTR)Data, DATA_LENGTH * sizeof(INTPTR)); + for (Index = 0; Index < DATA_LENGTH; Index++) Data[Index] = Index + 3; - Xil_DCacheInvalidateRange((u32)Data, DATA_LENGTH * sizeof(u32)); + Xil_DCacheInvalidateRange((INTPTR)Data, DATA_LENGTH * sizeof(INTPTR)); xil_printf(" invalidate dcache range done\r\n"); + dsb(); + #ifdef __aarch64__ + CtrlReg = mfcp(SCTLR_EL3); + CtrlReg &= ~(XREG_CONTROL_DCACHE_BIT); + mtcp(SCTLR_EL3,CtrlReg); + #else + CtrlReg = mfcp(XREG_CP15_SYS_CONTROL); + CtrlReg &= ~(XREG_CP15_CONTROL_C_BIT); + mtcp(XREG_CP15_SYS_CONTROL, CtrlReg); + #endif + dsb(); + for (Index = 0; Index < DATA_LENGTH; Index++) + Data[Index] = 0xA0A0A05; + dsb(); + #ifdef __aarch64__ + CtrlReg = mfcp(SCTLR_EL3); + CtrlReg |= (XREG_CONTROL_DCACHE_BIT); + mtcp(SCTLR_EL3,CtrlReg); + #else + CtrlReg = mfcp(XREG_CP15_SYS_CONTROL); + CtrlReg |= (XREG_CP15_CONTROL_C_BIT); + mtcp(XREG_CP15_SYS_CONTROL, CtrlReg); + #endif + dsb(); Status = 0; for (Index = 0; Index < DATA_LENGTH; Index++) { Value = Data[Index]; - if (Value != 0xA0A00505) { + if (Value != 0xA0A0A05) { Status = -1; xil_printf("Data[%d] = %x\r\n", Index, Value); break; } } + if (!Status) { xil_printf(" Invalidate worked\r\n"); } else { xil_printf("Error: Invalidate dcache range not working\r\n"); } - xil_printf("-- Cache Range Test Complete --\r\n"); - return Status; } @@ -136,23 +214,66 @@ int Xil_TestDCacheRange(void) * - 0 is returned for a pass * - -1 is returned for a failure */ -int Xil_TestDCacheAll(void) +s32 Xil_TestDCacheAll(void) { - int Index; - int Status; - u32 Value; + s32 Index; + s32 Status; + INTPTR Value; + u32 CtrlReg; xil_printf("-- Cache All Test --\n\r"); - for (Index = 0; Index < DATA_LENGTH; Index++) Data[Index] = 0x50500A0A; - xil_printf(" initialize Data done:\r\n"); Xil_DCacheFlush(); - xil_printf(" flush all done\r\n"); + dsb(); + #ifdef __aarch64__ + CtrlReg = mfcp(SCTLR_EL3); + CtrlReg &= ~(XREG_CONTROL_DCACHE_BIT); + mtcp(SCTLR_EL3,CtrlReg); + #else + CtrlReg = mfcp(XREG_CP15_SYS_CONTROL); + CtrlReg &= ~(XREG_CP15_CONTROL_C_BIT); + mtcp(XREG_CP15_SYS_CONTROL, CtrlReg); + #endif + dsb(); + Status = 0; + + for (Index = 0; Index < DATA_LENGTH; Index++) { + Value = Data[Index]; + + if (Value != 0x50500A0A) { + Status = -1; + xil_printf("Data[%d] = %x\r\n", Index, Value); + break; + } + } + + if (!Status) { + xil_printf(" Flush all worked\r\n"); + } + else { + xil_printf("Error: Flush dcache all not working\r\n"); + } + dsb(); + #ifdef __aarch64__ + CtrlReg = mfcp(SCTLR_EL3); + CtrlReg |= (XREG_CONTROL_DCACHE_BIT); + mtcp(SCTLR_EL3,CtrlReg); + #else + CtrlReg = mfcp(XREG_CP15_SYS_CONTROL); + CtrlReg |= (XREG_CP15_CONTROL_C_BIT); + mtcp(XREG_CP15_SYS_CONTROL, CtrlReg); + #endif + dsb(); + for (Index = 0; Index < DATA_LENGTH; Index++) + Data[Index] = 0x505FFA0A; + + Xil_DCacheFlush(); + for (Index = 0; Index < DATA_LENGTH; Index++) Data[Index] = Index + 3; @@ -160,12 +281,35 @@ int Xil_TestDCacheAll(void) Xil_DCacheInvalidate(); xil_printf(" invalidate all done\r\n"); - + dsb(); + #ifdef __aarch64__ + CtrlReg = mfcp(SCTLR_EL3); + CtrlReg &= ~(XREG_CONTROL_DCACHE_BIT); + mtcp(SCTLR_EL3,CtrlReg); + #else + CtrlReg = mfcp(XREG_CP15_SYS_CONTROL); + CtrlReg &= ~(XREG_CP15_CONTROL_C_BIT); + mtcp(XREG_CP15_SYS_CONTROL, CtrlReg); + #endif + dsb(); + for (Index = 0; Index < DATA_LENGTH; Index++) + Data[Index] = 0x50CFA0A; + dsb(); + #ifdef __aarch64__ + CtrlReg = mfcp(SCTLR_EL3); + CtrlReg |= (XREG_CONTROL_DCACHE_BIT); + mtcp(SCTLR_EL3,CtrlReg); + #else + CtrlReg = mfcp(XREG_CP15_SYS_CONTROL); + CtrlReg |= (XREG_CP15_CONTROL_C_BIT); + mtcp(XREG_CP15_SYS_CONTROL, CtrlReg); + #endif + dsb(); Status = 0; for (Index = 0; Index < DATA_LENGTH; Index++) { Value = Data[Index]; - if (Value != 0x50500A0A) { + if (Value != 0x50CFA0A) { Status = -1; xil_printf("Data[%d] = %x\r\n", Index, Value); break; @@ -176,13 +320,12 @@ int Xil_TestDCacheAll(void) xil_printf(" Invalidate all worked\r\n"); } else { - xil_printf("Error: Invalidate dcache all not working\r\n"); + xil_printf("Error: Invalidate dcache all not working\r\n"); } xil_printf("-- DCache all Test Complete --\n\r"); return Status; - } @@ -194,12 +337,12 @@ int Xil_TestDCacheAll(void) * - 0 is returned for a pass * The function will hang if it fails. */ -int Xil_TestICacheRange(void) +s32 Xil_TestICacheRange(void) { - Xil_ICacheInvalidateRange((u32)Xil_TestICacheRange, 1024); - Xil_ICacheInvalidateRange((u32)Xil_TestDCacheRange, 1024); - Xil_ICacheInvalidateRange((u32)Xil_TestDCacheAll, 1024); + Xil_ICacheInvalidateRange((INTPTR)Xil_TestICacheRange, 1024); + Xil_ICacheInvalidateRange((INTPTR)Xil_TestDCacheRange, 1024); + Xil_ICacheInvalidateRange((INTPTR)Xil_TestDCacheAll, 1024); xil_printf("-- Invalidate icache range done --\r\n"); @@ -214,9 +357,10 @@ int Xil_TestICacheRange(void) * - 0 is returned for a pass * The function will hang if it fails. */ -int Xil_TestICacheAll(void) +s32 Xil_TestICacheAll(void) { Xil_ICacheInvalidate(); xil_printf("-- Invalidate icache all done --\r\n"); return 0; } +#endif diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testcache.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testcache.h similarity index 90% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testcache.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testcache.h index 501cbba5a..b3c416cd0 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testcache.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testcache.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -45,14 +45,16 @@ #ifndef XIL_TESTCACHE_H /* prevent circular inclusions */ #define XIL_TESTCACHE_H /* by using protection macros */ +#include "xil_types.h" + #ifdef __cplusplus extern "C" { #endif -extern int Xil_TestDCacheRange(void); -extern int Xil_TestDCacheAll(void); -extern int Xil_TestICacheRange(void); -extern int Xil_TestICacheAll(void); +extern s32 Xil_TestDCacheRange(void); +extern s32 Xil_TestDCacheAll(void); +extern s32 Xil_TestICacheRange(void); +extern s32 Xil_TestICacheAll(void); #ifdef __cplusplus } diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testio.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testio.c similarity index 75% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testio.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testio.c index 78ec83fde..a68d7652f 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testio.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testio.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -60,19 +60,19 @@ * * Endian swap a 16-bit word. * @param Data is the 16-bit word to be swapped. - * @return The endian swapped valud. + * @return The endian swapped value. * */ static u16 Swap16(u16 Data) { - return ((Data >> 8) & 0x00FF) | ((Data << 8) & 0xFF00); + return ((Data >> 8U) & 0x00FFU) | ((Data << 8U) & 0xFF00U); } /** * * Endian swap a 32-bit word. * @param Data is the 32-bit word to be swapped. - * @return The endian swapped valud. + * @return The endian swapped value. * */ static u32 Swap32(u32 Data) @@ -83,13 +83,13 @@ static u32 Swap32(u32 Data) u16 Swap16Lo; u16 Swap16Hi; - Hi16 = (u16)((Data >> 16) & 0x0000FFFF); - Lo16 = (u16)(Data & 0x0000FFFF); + Hi16 = (u16)((Data >> 16U) & 0x0000FFFFU); + Lo16 = (u16)(Data & 0x0000FFFFU); Swap16Lo = Swap16(Lo16); Swap16Hi = Swap16(Hi16); - return (((u32)(Swap16Lo)) << 16) | ((u32)Swap16Hi); + return (((u32)(Swap16Lo)) << 16U) | ((u32)Swap16Hi); } /*****************************************************************************/ @@ -100,7 +100,7 @@ static u32 Swap32(u32 Data) * values. * * @param Addr is a pointer to the region of memory to be tested. -* @param Len is the length of the block. +* @param Length is the Length of the block. * @param Value is the constant used for writting the memory. * * @return @@ -110,22 +110,23 @@ static u32 Swap32(u32 Data) * *****************************************************************************/ -int Xil_TestIO8(u8 *Addr, int Len, u8 Value) +s32 Xil_TestIO8(u8 *Addr, s32 Length, u8 Value) { u8 ValueIn; - int Index; + s32 Index; + s32 Status = 0; - for (Index = 0; Index < Len; Index++) { - Xil_Out8((u32)Addr, Value); + for (Index = 0; Index < Length; Index++) { + Xil_Out8((INTPTR)Addr, Value); - ValueIn = Xil_In8((u32)Addr); + ValueIn = Xil_In8((INTPTR)Addr); - if (Value != ValueIn) { - return -1; + if ((Value != ValueIn) && (Status == 0)) { + Status = -1; + break; } } - - return 0; + return Status; } @@ -142,7 +143,7 @@ int Xil_TestIO8(u8 *Addr, int Len, u8 Value) * read-in value before comparing is controlled by the 5th argument. * * @param Addr is a pointer to the region of memory to be tested. -* @param Len is the length of the block. +* @param Length is the Length of the block. * @param Value is the constant used for writting the memory. * @param Kind is the test kind. Acceptable values are: * XIL_TESTIO_DEFAULT, XIL_TESTIO_LE, XIL_TESTIO_BE. @@ -155,60 +156,63 @@ int Xil_TestIO8(u8 *Addr, int Len, u8 Value) * *****************************************************************************/ -int Xil_TestIO16(u16 *Addr, int Len, u16 Value, int Kind, int Swap) +s32 Xil_TestIO16(u16 *Addr, s32 Length, u16 Value, s32 Kind, s32 Swap) { - u16 ValueIn; - int Index; + u16 *TempAddr16; + u16 ValueIn = 0U; + s32 Index; + TempAddr16 = Addr; + Xil_AssertNonvoid(TempAddr16 != NULL); - for (Index = 0; Index < Len; Index++) { + for (Index = 0; Index < Length; Index++) { switch (Kind) { case XIL_TESTIO_LE: - Xil_Out16LE((u32)Addr, Value); + Xil_Out16LE((INTPTR)TempAddr16, Value); break; case XIL_TESTIO_BE: - Xil_Out16BE((u32)Addr, Value); + Xil_Out16BE((INTPTR)TempAddr16, Value); break; default: - Xil_Out16((u32)Addr, Value); + Xil_Out16((INTPTR)TempAddr16, Value); break; } - ValueIn = Xil_In16((u32)Addr); + ValueIn = Xil_In16((INTPTR)TempAddr16); - if (Kind && Swap) + if ((Kind != 0) && (Swap != 0)) { ValueIn = Swap16(ValueIn); + } if (Value != ValueIn) { return -1; } /* second round */ - Xil_Out16((u32)Addr, Value); + Xil_Out16((INTPTR)TempAddr16, Value); switch (Kind) { case XIL_TESTIO_LE: - ValueIn = Xil_In16LE((u32)Addr); + ValueIn = Xil_In16LE((INTPTR)TempAddr16); break; case XIL_TESTIO_BE: - ValueIn = Xil_In16BE((u32)Addr); + ValueIn = Xil_In16BE((INTPTR)TempAddr16); break; default: - ValueIn = Xil_In16((u32)Addr); + ValueIn = Xil_In16((INTPTR)TempAddr16); break; } - if (Kind && Swap) + if ((Kind != 0) && (Swap != 0)) { ValueIn = Swap16(ValueIn); + } if (Value != ValueIn) { return -1; } - Addr++; + TempAddr16 += sizeof(u16); } - return 0; - } @@ -225,7 +229,7 @@ int Xil_TestIO16(u16 *Addr, int Len, u16 Value, int Kind, int Swap) * before comparing is controlled by the 5th argument. * * @param Addr is a pointer to the region of memory to be tested. -* @param Len is the length of the block. +* @param Length is the Length of the block. * @param Value is the constant used for writting the memory. * @param Kind is the test kind. Acceptable values are: * XIL_TESTIO_DEFAULT, XIL_TESTIO_LE, XIL_TESTIO_BE. @@ -237,57 +241,61 @@ int Xil_TestIO16(u16 *Addr, int Len, u16 Value, int Kind, int Swap) * - 0 is returned for a pass * *****************************************************************************/ -int Xil_TestIO32(u32 *Addr, int Len, u32 Value, int Kind, int Swap) +s32 Xil_TestIO32(u32 *Addr, s32 Length, u32 Value, s32 Kind, s32 Swap) { - u32 ValueIn; - int Index; + u32 *TempAddr; + u32 ValueIn = 0U; + s32 Index; + TempAddr = Addr; + Xil_AssertNonvoid(TempAddr != NULL); - for (Index = 0; Index < Len; Index++) { + for (Index = 0; Index < Length; Index++) { switch (Kind) { case XIL_TESTIO_LE: - Xil_Out32LE((u32)Addr, Value); + Xil_Out32LE((INTPTR)TempAddr, Value); break; case XIL_TESTIO_BE: - Xil_Out32BE((u32)Addr, Value); + Xil_Out32BE((INTPTR)TempAddr, Value); break; default: - Xil_Out32((u32)Addr, Value); + Xil_Out32((INTPTR)TempAddr, Value); break; } - ValueIn = Xil_In32((u32)Addr); + ValueIn = Xil_In32((INTPTR)TempAddr); - if (Kind && Swap) + if ((Kind != 0) && (Swap != 0)) { ValueIn = Swap32(ValueIn); + } if (Value != ValueIn) { return -1; } /* second round */ - Xil_Out32((u32)Addr, Value); + Xil_Out32((INTPTR)TempAddr, Value); switch (Kind) { case XIL_TESTIO_LE: - ValueIn = Xil_In32LE((u32)Addr); + ValueIn = Xil_In32LE((INTPTR)TempAddr); break; case XIL_TESTIO_BE: - ValueIn = Xil_In32BE((u32)Addr); + ValueIn = Xil_In32BE((INTPTR)TempAddr); break; default: - ValueIn = Xil_In32((u32)Addr); + ValueIn = Xil_In32((INTPTR)TempAddr); break; } - if (Kind && Swap) + if ((Kind != 0) && (Swap != 0)) { ValueIn = Swap32(ValueIn); + } if (Value != ValueIn) { return -1; } - Addr++; + TempAddr += sizeof(u32); } return 0; } - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testio.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testio.h similarity index 91% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testio.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testio.h index bb0520824..fba0c1060 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testio.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testio.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -80,9 +80,9 @@ extern "C" { /************************** Function Prototypes ******************************/ -extern int Xil_TestIO8(u8 *Addr, int Len, u8 Value); -extern int Xil_TestIO16(u16 *Addr, int Len, u16 Value, int Kind, int Swap); -extern int Xil_TestIO32(u32 *Addr, int Len, u32 Value, int Kind, int Swap); +extern s32 Xil_TestIO8(u8 *Addr, s32 Length, u8 Value); +extern s32 Xil_TestIO16(u16 *Addr, s32 Length, u16 Value, s32 Kind, s32 Swap); +extern s32 Xil_TestIO32(u32 *Addr, s32 Length, u32 Value, s32 Kind, s32 Swap); #ifdef __cplusplus } diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testmem.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testmem.c similarity index 66% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testmem.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testmem.c index 492bf0878..19a3b6608 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testmem.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testmem.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -92,16 +92,18 @@ static u32 RotateRight(u32 Input, u8 Width); * patterns used not to repeat over the region tested. * *****************************************************************************/ -int Xil_TestMem32(u32 *Addr, u32 Words, u32 Pattern, u8 Subtest) +s32 Xil_TestMem32(u32 *Addr, u32 Words, u32 Pattern, u8 Subtest) { u32 I; - u32 J; + u32 j; u32 Val; u32 FirtVal; - u32 Word; + u32 WordMem32; + s32 Status = 0; - Xil_AssertNonvoid(Words != 0); - Xil_AssertNonvoid(Subtest <= XIL_TESTMEM_MAXTEST); + Xil_AssertNonvoid(Words != (u32)0); + Xil_AssertNonvoid(Subtest <= (u8)XIL_TESTMEM_MAXTEST); + Xil_AssertNonvoid(Addr != NULL); /* * variable initialization @@ -109,25 +111,14 @@ int Xil_TestMem32(u32 *Addr, u32 Words, u32 Pattern, u8 Subtest) Val = XIL_TESTMEM_INIT_VALUE; FirtVal = XIL_TESTMEM_INIT_VALUE; - /* - * Select the proper Subtest - */ - switch (Subtest) { - - case XIL_TESTMEM_ALLMEMTESTS: - - /* this case executes all of the Subtests */ - - /* fall through case statement */ - - case XIL_TESTMEM_INCREMENT: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_INCREMENT)) { /* * Fill the memory with incrementing * values starting from 'FirtVal' */ - for (I = 0L; I < Words; I++) { - Addr[I] = Val; + for (I = 0U; I < Words; I++) { + *(Addr+I) = Val; Val++; } @@ -144,104 +135,90 @@ int Xil_TestMem32(u32 *Addr, u32 Words, u32 Pattern, u8 Subtest) * Val */ - for (I = 0L; I < Words; I++) { - Word = Addr[I]; + for (I = 0U; I < Words; I++) { + WordMem32 = *(Addr+I); - if (Word != Val) { - return -1; + if (WordMem32 != Val) { + Status = -1; + goto End_Label; } Val++; } + } - - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; - } - - - /* end of case 1 */ - - /* fall through case statement */ - - case XIL_TESTMEM_WALKONES: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_WALKONES)) { /* * set up to cycle through all possible initial * test Patterns for walking ones test */ - for (J = 0L; J < 32; J++) { + for (j = 0U; j < (u32)32; j++) { /* * Generate an initial value for walking ones test * to test for bad data bits */ - Val = 1 << J; + Val = (1U << j); /* * START walking ones test * Write a one to each data bit indifferent locations */ - for (I = 0L; I < 32; I++) { + for (I = 0U; I < (u32)32; I++) { /* write memory location */ - Addr[I] = Val; - Val = (u32) RotateLeft(Val, 32); + *(Addr+I) = Val; + Val = (u32) RotateLeft(Val, 32U); } /* * Restore the reference 'val' to the * initial value */ - Val = 1 << J; + Val = 1U << j; /* Read the values from each location that was * written */ - for (I = 0L; I < 32; I++) { + for (I = 0U; I < (u32)32; I++) { /* read memory location */ - Word = Addr[I]; + WordMem32 = *(Addr+I); - if (Word != Val) { - return -1; + if (WordMem32 != Val) { + Status = -1; + goto End_Label; } - Val = (u32)RotateLeft(Val, 32); + Val = (u32)RotateLeft(Val, 32U); } - - } - - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; } + } - /* end of case 2 */ - /* fall through case statement */ - - case XIL_TESTMEM_WALKZEROS: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_WALKZEROS)) { /* * set up to cycle through all possible * initial test Patterns for walking zeros test */ - for (J = 0L; J < 32; J++) { + for (j = 0U; j < (u32)32; j++) { /* * Generate an initial value for walking ones test * to test for bad data bits */ - Val = ~(1 << J); + Val = ~(1U << j); /* * START walking zeros test * Write a one to each data bit indifferent locations */ - for (I = 0L; I < 32; I++) { + for (I = 0U; I < (u32)32; I++) { /* write memory location */ - Addr[I] = Val; - Val = ~((u32)RotateLeft(~Val, 32)); + *(Addr+I) = Val; + Val = ~((u32)RotateLeft(~Val, 32U)); } /* @@ -249,35 +226,29 @@ int Xil_TestMem32(u32 *Addr, u32 Words, u32 Pattern, u8 Subtest) * initial value */ - Val = ~(1 << J); + Val = ~(1U << j); /* Read the values from each location that was * written */ - for (I = 0L; I < 32; I++) { + for (I = 0U; I < (u32)32; I++) { /* read memory location */ - Word = Addr[I]; - if (Word != Val) { - return -1; + WordMem32 = *(Addr+I); + if (WordMem32 != Val) { + Status = -1; + goto End_Label; } - Val = ~((u32)RotateLeft(~Val, 32)); + Val = ~((u32)RotateLeft(~Val, 32U)); } } + } - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; - } - - /* end of case 3 */ - - /* fall through case statement */ - - case XIL_TESTMEM_INVERSEADDR: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_INVERSEADDR)) { /* Fill the memory with inverse of address */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* write memory location */ - Val = (u32) (~((u32) (&Addr[I]))); - Addr[I] = Val; + Val = (u32) (~((INTPTR) (&Addr[I]))); + *(Addr+I) = Val; } /* @@ -285,31 +256,26 @@ int Xil_TestMem32(u32 *Addr, u32 Words, u32 Pattern, u8 Subtest) * of tested memory */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* Read the location */ - Word = Addr[I]; - Val = (u32) (~((u32) (&Addr[I]))); + WordMem32 = *(Addr+I); + Val = (u32) (~((INTPTR) (&Addr[I]))); - if ((Word ^ Val) != 0x00000000) { - return -1; + if ((WordMem32 ^ Val) != 0x00000000U) { + Status = -1; + goto End_Label; } } + } - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; - } - /* end of case 4 */ - - /* fall through case statement */ - - case XIL_TESTMEM_FIXEDPATTERN: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_FIXEDPATTERN)) { /* * Generate an initial value for * memory testing */ - if (Pattern == 0) { - Val = 0xDEADBEEF; + if (Pattern == (u32)0) { + Val = 0xDEADBEEFU; } else { Val = Pattern; @@ -319,9 +285,9 @@ int Xil_TestMem32(u32 *Addr, u32 Words, u32 Pattern, u8 Subtest) * Fill the memory with fixed Pattern */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* write memory location */ - Addr[I] = Val; + *(Addr+I) = Val; } /* @@ -330,33 +296,20 @@ int Xil_TestMem32(u32 *Addr, u32 Words, u32 Pattern, u8 Subtest) * with the fixed Pattern */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* read memory location */ - Word = Addr[I]; - if (Word != Val) { - return -1; + WordMem32 = *(Addr+I); + if (WordMem32 != Val) { + Status = -1; + goto End_Label; } } + } - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; - } - /* end of case 5 */ - - /* this break is for the prior fall through case statements */ - - break; - - default: - return -1; - - } /* end of switch */ - - /* Successfully passed memory test ! */ - - return 0; +End_Label: + return Status; } /*****************************************************************************/ @@ -388,16 +341,18 @@ int Xil_TestMem32(u32 *Addr, u32 Words, u32 Pattern, u8 Subtest) * patterns used not to repeat over the region tested. * *****************************************************************************/ -int Xil_TestMem16(u16 *Addr, u32 Words, u16 Pattern, u8 Subtest) +s32 Xil_TestMem16(u16 *Addr, u32 Words, u16 Pattern, u8 Subtest) { u32 I; - u32 J; + u32 j; u16 Val; u16 FirtVal; - u16 Word; + u16 WordMem16; + s32 Status = 0; - Xil_AssertNonvoid(Words != 0); + Xil_AssertNonvoid(Words != (u32)0); Xil_AssertNonvoid(Subtest <= XIL_TESTMEM_MAXTEST); + Xil_AssertNonvoid(Addr != NULL); /* * variable initialization @@ -409,22 +364,14 @@ int Xil_TestMem16(u16 *Addr, u32 Words, u16 Pattern, u8 Subtest) * selectthe proper Subtest(s) */ - switch (Subtest) { - - case XIL_TESTMEM_ALLMEMTESTS: - - /* this case executes all of the Subtests */ - - /* fall through case statement */ - - case XIL_TESTMEM_INCREMENT: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_INCREMENT)) { /* * Fill the memory with incrementing * values starting from 'FirtVal' */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* write memory location */ - Addr[I] = Val; + *(Addr+I) = Val; Val++; } /* @@ -439,145 +386,131 @@ int Xil_TestMem16(u16 *Addr, u32 Words, u16 Pattern, u8 Subtest) * with the incrementing reference val */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* read memory location */ - Word = Addr[I]; - if (Word != Val) { - return -1; + WordMem16 = *(Addr+I); + if (WordMem16 != Val) { + Status = -1; + goto End_Label; } Val++; } - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; - } - - /* end of case 1 */ - /* fall through case statement */ + } - case XIL_TESTMEM_WALKONES: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_WALKONES)) { /* * set up to cycle through all possible initial test * Patterns for walking ones test */ - for (J = 0L; J < 16; J++) { + for (j = 0U; j < (u32)16; j++) { /* * Generate an initial value for walking ones test * to test for bad data bits */ - Val = 1 << J; + Val = (u16)((u32)1 << j); /* * START walking ones test * Write a one to each data bit indifferent locations */ - for (I = 0L; I < 16; I++) { + for (I = 0U; I < (u32)16; I++) { /* write memory location */ - Addr[I] = Val; - Val = (u16)RotateLeft(Val, 16); + *(Addr+I) = Val; + Val = (u16)RotateLeft(Val, 16U); } /* * Restore the reference 'Val' to the * initial value */ - Val = 1 << J; + Val = (u16)((u32)1 << j); /* Read the values from each location that was written */ - for (I = 0L; I < 16; I++) { + for (I = 0U; I < (u32)16; I++) { /* read memory location */ - Word = Addr[I]; - if (Word != Val) { - return -1; + WordMem16 = *(Addr+I); + if (WordMem16 != Val) { + Status = -1; + goto End_Label; } - Val = (u16)RotateLeft(Val, 16); + Val = (u16)RotateLeft(Val, 16U); } - } - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; - } - /* end of case 2 */ - /* fall through case statement */ + } - case XIL_TESTMEM_WALKZEROS: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_WALKZEROS)) { /* * set up to cycle through all possible initial * test Patterns for walking zeros test */ - for (J = 0L; J < 16; J++) { + for (j = 0U; j < (u32)16; j++) { /* * Generate an initial value for walking ones * test to test for bad * data bits */ - Val = ~(1 << J); + Val = ~(1U << j); /* * START walking zeros test * Write a one to each data bit indifferent locations */ - for (I = 0L; I < 16; I++) { + for (I = 0U; I < (u32)16; I++) { /* write memory location */ - Addr[I] = Val; - Val = ~((u16)RotateLeft(~Val, 16)); + *(Addr+I) = Val; + Val = ~((u16)RotateLeft(~Val, 16U)); } /* * Restore the reference 'Val' to the * initial value */ - Val = ~(1 << J); + Val = ~(1U << j); /* Read the values from each location that was written */ - for (I = 0L; I < 16; I++) { + for (I = 0U; I < (u32)16; I++) { /* read memory location */ - Word = Addr[I]; - if (Word != Val) { - return -1; + WordMem16 = *(Addr+I); + if (WordMem16 != Val) { + Status = -1; + goto End_Label; } - Val = ~((u16)RotateLeft(~Val, 16)); + Val = ~((u16)RotateLeft(~Val, 16U)); } } - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; - } - /* end of case 3 */ - /* fall through case statement */ + } - case XIL_TESTMEM_INVERSEADDR: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_INVERSEADDR)) { /* Fill the memory with inverse of address */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* write memory location */ - Val = (u16) (~((u32) (&Addr[I]))); - Addr[I] = Val; + Val = (u16) (~((INTPTR)(&Addr[I]))); + *(Addr+I) = Val; } /* * Check every word within the words * of tested memory */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* read memory location */ - Word = Addr[I]; - Val = (u16) (~((u32) (&Addr[I]))); - if ((Word ^ Val) != 0x0000) { - return -1; + WordMem16 = *(Addr+I); + Val = (u16) (~((INTPTR) (&Addr[I]))); + if ((WordMem16 ^ Val) != 0x0000U) { + Status = -1; + goto End_Label; } } - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; - } - /* end of case 4 */ - /* fall through case statement */ + } - case XIL_TESTMEM_FIXEDPATTERN: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_FIXEDPATTERN)) { /* * Generate an initial value for * memory testing */ - if (Pattern == 0) { - Val = 0xDEAD; + if (Pattern == (u16)0) { + Val = 0xDEADU; } else { Val = Pattern; @@ -587,9 +520,9 @@ int Xil_TestMem16(u16 *Addr, u32 Words, u16 Pattern, u8 Subtest) * Fill the memory with fixed pattern */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* write memory location */ - Addr[I] = Val; + *(Addr+I) = Val; } /* @@ -598,29 +531,18 @@ int Xil_TestMem16(u16 *Addr, u32 Words, u16 Pattern, u8 Subtest) * with the fixed pattern */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* read memory location */ - Word = Addr[I]; - if (Word != Val) { - return -1; + WordMem16 = *(Addr+I); + if (WordMem16 != Val) { + Status = -1; + goto End_Label; } } - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; - } - /* end of case 5 */ - /* this break is for the prior fall through case statements */ - - break; - - default: - return -1; - - } /* end of switch */ - - /* Successfully passed memory test ! */ + } - return 0; +End_Label: + return Status; } @@ -653,16 +575,18 @@ int Xil_TestMem16(u16 *Addr, u32 Words, u16 Pattern, u8 Subtest) * patterns used not to repeat over the region tested. * *****************************************************************************/ -int Xil_TestMem8(u8 *Addr, u32 Words, u8 Pattern, u8 Subtest) +s32 Xil_TestMem8(u8 *Addr, u32 Words, u8 Pattern, u8 Subtest) { u32 I; - u32 J; + u32 j; u8 Val; u8 FirtVal; - u8 Word; + u8 WordMem8; + s32 Status = 0; - Xil_AssertNonvoid(Words != 0); + Xil_AssertNonvoid(Words != (u32)0); Xil_AssertNonvoid(Subtest <= XIL_TESTMEM_MAXTEST); + Xil_AssertNonvoid(Addr != NULL); /* * variable initialization @@ -674,20 +598,14 @@ int Xil_TestMem8(u8 *Addr, u32 Words, u8 Pattern, u8 Subtest) * select the proper Subtest(s) */ - switch (Subtest) { - - case XIL_TESTMEM_ALLMEMTESTS: - /* this case executes all of the Subtests */ - /* fall through case statement */ - - case XIL_TESTMEM_INCREMENT: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_INCREMENT)) { /* * Fill the memory with incrementing * values starting from 'FirtVal' */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* write memory location */ - Addr[I] = Val; + *(Addr+I) = Val; Val++; } /* @@ -702,115 +620,102 @@ int Xil_TestMem8(u8 *Addr, u32 Words, u8 Pattern, u8 Subtest) * Val */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* read memory location */ - Word = Addr[I]; - if (Word != Val) { - return -1; + WordMem8 = *(Addr+I); + if (WordMem8 != Val) { + Status = -1; + goto End_Label; } Val++; } + } - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; - } - /* end of case 1 */ - - /* fall through case statement */ - - case XIL_TESTMEM_WALKONES: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_WALKONES)) { /* * set up to cycle through all possible initial * test Patterns for walking ones test */ - for (J = 0L; J < 8; J++) { + for (j = 0U; j < (u32)8; j++) { /* * Generate an initial value for walking ones test * to test for bad data bits */ - Val = 1 << J; + Val = (u8)((u32)1 << j); /* * START walking ones test * Write a one to each data bit indifferent locations */ - for (I = 0L; I < 8; I++) { + for (I = 0U; I < (u32)8; I++) { /* write memory location */ - Addr[I] = Val; - Val = (u8)RotateLeft(Val, 8); + *(Addr+I) = Val; + Val = (u8)RotateLeft(Val, 8U); } /* * Restore the reference 'Val' to the * initial value */ - Val = 1 << J; + Val = (u8)((u32)1 << j); /* Read the values from each location that was written */ - for (I = 0L; I < 8; I++) { + for (I = 0U; I < (u32)8; I++) { /* read memory location */ - Word = Addr[I]; - if (Word != Val) { - return -1; + WordMem8 = *(Addr+I); + if (WordMem8 != Val) { + Status = -1; + goto End_Label; } - Val = (u8)RotateLeft(Val, 8); + Val = (u8)RotateLeft(Val, 8U); } } + } - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; - } - /* end of case 2 */ - /* fall through case statement */ - - case XIL_TESTMEM_WALKZEROS: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_WALKZEROS)) { /* * set up to cycle through all possible initial test * Patterns for walking zeros test */ - for (J = 0L; J < 8; J++) { + for (j = 0U; j < (u32)8; j++) { /* * Generate an initial value for walking ones test to test * for bad data bits */ - Val = ~(1 << J); + Val = ~(1U << j); /* * START walking zeros test * Write a one to each data bit indifferent locations */ - for (I = 0L; I < 8; I++) { + for (I = 0U; I < (u32)8; I++) { /* write memory location */ - Addr[I] = Val; - Val = ~((u8)RotateLeft(~Val, 8)); + *(Addr+I) = Val; + Val = ~((u8)RotateLeft(~Val, 8U)); } /* * Restore the reference 'Val' to the * initial value */ - Val = ~(1 << J); + Val = ~(1U << j); /* Read the values from each location that was written */ - for (I = 0L; I < 8; I++) { + for (I = 0U; I < (u32)8; I++) { /* read memory location */ - Word = Addr[I]; - if (Word != Val) { - return -1; + WordMem8 = *(Addr+I); + if (WordMem8 != Val) { + Status = -1; + goto End_Label; } - Val = ~((u8)RotateLeft(~Val, 8)); + Val = ~((u8)RotateLeft(~Val, 8U)); } } + } - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; - } - /* end of case 3 */ - /* fall through case statement */ - - case XIL_TESTMEM_INVERSEADDR: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_INVERSEADDR)) { /* Fill the memory with inverse of address */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* write memory location */ - Val = (u8) (~((u32) (&Addr[I]))); - Addr[I] = Val; + Val = (u8) (~((INTPTR) (&Addr[I]))); + *(Addr+I) = Val; } /* @@ -818,28 +723,25 @@ int Xil_TestMem8(u8 *Addr, u32 Words, u8 Pattern, u8 Subtest) * of tested memory */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* read memory location */ - Word = Addr[I]; - Val = (u8) (~((u32) (&Addr[I]))); - if ((Word ^ Val) != 0x00) { - return -1; + WordMem8 = *(Addr+I); + Val = (u8) (~((INTPTR) (&Addr[I]))); + if ((WordMem8 ^ Val) != 0x00U) { + Status = -1; + goto End_Label; } } - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; - } - /* end of case 4 */ - /* fall through case statement */ + } - case XIL_TESTMEM_FIXEDPATTERN: + if((Subtest == XIL_TESTMEM_ALLMEMTESTS) || (Subtest == XIL_TESTMEM_FIXEDPATTERN)) { /* * Generate an initial value for * memory testing */ - if (Pattern == 0) { - Val = 0xA5; + if (Pattern == (u8)0) { + Val = 0xA5U; } else { Val = Pattern; @@ -847,9 +749,9 @@ int Xil_TestMem8(u8 *Addr, u32 Words, u8 Pattern, u8 Subtest) /* * Fill the memory with fixed Pattern */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* write memory location */ - Addr[I] = Val; + *(Addr+I) = Val; } /* * Check every word within the words @@ -857,32 +759,18 @@ int Xil_TestMem8(u8 *Addr, u32 Words, u8 Pattern, u8 Subtest) * with the fixed Pattern */ - for (I = 0L; I < Words; I++) { + for (I = 0U; I < Words; I++) { /* read memory location */ - Word = Addr[I]; - if (Word != Val) { - return -1; + WordMem8 = *(Addr+I); + if (WordMem8 != Val) { + Status = -1; + goto End_Label; } } + } - if (Subtest != XIL_TESTMEM_ALLMEMTESTS) { - return 0; - } - - /* end of case 5 */ - - /* this break is for the prior fall through case statements */ - - break; - - default: - return -1; - - } /* end of switch */ - - /* Successfully passed memory test ! */ - - return 0; +End_Label: + return Status; } @@ -909,27 +797,28 @@ static u32 RotateLeft(u32 Input, u8 Width) u32 ReturnVal; u32 WidthMask; u32 MsbMask; + u32 LocalInput = Input; /* * set up the WidthMask and the MsbMask */ - MsbMask = 1 << (Width - 1); + MsbMask = 1U << (Width - 1U); - WidthMask = (MsbMask << 1) - 1; + WidthMask = (MsbMask << (u32)1) - (u32)1; /* * set the Width of the Input to the correct width */ - Input = Input & WidthMask; + LocalInput = LocalInput & WidthMask; - Msb = Input & MsbMask; + Msb = LocalInput & MsbMask; - ReturnVal = Input << 1; + ReturnVal = LocalInput << 1U; - if (Msb != 0x00000000) { - ReturnVal = ReturnVal | 0x00000001; + if (Msb != 0x00000000U) { + ReturnVal = ReturnVal | (u32)0x00000001; } ReturnVal = ReturnVal & WidthMask; @@ -962,26 +851,26 @@ static u32 RotateRight(u32 Input, u8 Width) u32 ReturnVal; u32 WidthMask; u32 MsbMask; - + u32 LocalInput = Input; /* * set up the WidthMask and the MsbMask */ - MsbMask = 1 << (Width - 1); + MsbMask = 1U << (Width - 1U); - WidthMask = (MsbMask << 1) - 1; + WidthMask = (MsbMask << 1U) - 1U; /* * set the width of the input to the correct width */ - Input = Input & WidthMask; + LocalInput = LocalInput & WidthMask; - ReturnVal = Input >> 1; + ReturnVal = LocalInput >> 1U; - Lsb = Input & 0x00000001; + Lsb = LocalInput & 0x00000001U; - if (Lsb != 0x00000000) { + if (Lsb != 0x00000000U) { ReturnVal = ReturnVal | MsbMask; } @@ -991,4 +880,3 @@ static u32 RotateRight(u32 Input, u8 Width) } #endif /* ROTATE_RIGHT */ - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testmem.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testmem.h similarity index 90% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testmem.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testmem.h index 3b161f220..4cbfd878b 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_testmem.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_testmem.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2009 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -127,7 +127,7 @@ extern "C" { /* xutil_memtest defines */ -#define XIL_TESTMEM_INIT_VALUE 1 +#define XIL_TESTMEM_INIT_VALUE 1U /** @name Memory subtests * @{ @@ -135,12 +135,12 @@ extern "C" { /** * See the detailed description of the subtests in the file description. */ -#define XIL_TESTMEM_ALLMEMTESTS 0 -#define XIL_TESTMEM_INCREMENT 1 -#define XIL_TESTMEM_WALKONES 2 -#define XIL_TESTMEM_WALKZEROS 3 -#define XIL_TESTMEM_INVERSEADDR 4 -#define XIL_TESTMEM_FIXEDPATTERN 5 +#define XIL_TESTMEM_ALLMEMTESTS 0x00U +#define XIL_TESTMEM_INCREMENT 0x01U +#define XIL_TESTMEM_WALKONES 0x02U +#define XIL_TESTMEM_WALKZEROS 0x03U +#define XIL_TESTMEM_INVERSEADDR 0x04U +#define XIL_TESTMEM_FIXEDPATTERN 0x05U #define XIL_TESTMEM_MAXTEST XIL_TESTMEM_FIXEDPATTERN /* @} */ @@ -151,9 +151,9 @@ extern "C" { /* xutil_testmem prototypes */ -extern int Xil_TestMem32(u32 *Addr, u32 Words, u32 Pattern, u8 Subtest); -extern int Xil_TestMem16(u16 *Addr, u32 Words, u16 Pattern, u8 Subtest); -extern int Xil_TestMem8(u8 *Addr, u32 Words, u8 Pattern, u8 Subtest); +extern s32 Xil_TestMem32(u32 *Addr, u32 Words, u32 Pattern, u8 Subtest); +extern s32 Xil_TestMem16(u16 *Addr, u32 Words, u16 Pattern, u8 Subtest); +extern s32 Xil_TestMem8(u8 *Addr, u32 Words, u8 Pattern, u8 Subtest); #ifdef __cplusplus } diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_types.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_types.h similarity index 80% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_types.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_types.h index c9c173018..e8b78b7c6 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xil_types.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xil_types.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2010 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -44,7 +44,9 @@ * ----- ---- -------- ------------------------------------------------------- * 1.00a hbm 07/14/09 First release * 3.03a sdm 05/30/11 Added Xuint64 typedef and XUINT64_MSW/XUINT64_LSW macros -* 4.2 srt 07/03/14 Use standard definitions from stdint.h +* 5.00 pkp 05/29/14 Made changes for 64 bit architecture +* srt 07/14/14 Use standard definitions from stdint.h and stddef.h +* Define LONG and ULONG datatypes and mask values * * ******************************************************************************/ @@ -58,19 +60,19 @@ /************************** Constant Definitions *****************************/ #ifndef TRUE -# define TRUE 1 +# define TRUE 1U #endif #ifndef FALSE -# define FALSE 0 +# define FALSE 0U #endif #ifndef NULL -#define NULL 0 +#define NULL 0U #endif -#define XIL_COMPONENT_IS_READY 0x11111111 /**< component has been initialized */ -#define XIL_COMPONENT_IS_STARTED 0x22222222 /**< component has been started */ +#define XIL_COMPONENT_IS_READY 0x11111111U /**< component has been initialized */ +#define XIL_COMPONENT_IS_STARTED 0x22222222U /**< component has been started */ /** @name New types * New simple types. @@ -124,25 +126,27 @@ typedef struct /** * xbasic_types.h does not typedef s* or u64 */ -typedef uint64_t u64; +typedef char char8; typedef int8_t s8; typedef int16_t s16; typedef int32_t s32; typedef int64_t s64; +typedef uint64_t u64; +typedef int sint32; + typedef intptr_t INTPTR; typedef uintptr_t UINTPTR; -typedef ptrdiff_t PTRDIFF; +typedef ptrdiff_t PTRDIFF; #if !defined(LONG) || !defined(ULONG) typedef long LONG; typedef unsigned long ULONG; #endif -#define ULONG64_HI_MASK 0xFFFFFFFF00000000 +#define ULONG64_HI_MASK 0xFFFFFFFF00000000U #define ULONG64_LO_MASK ~ULONG64_HI_MASK - #else #include #endif @@ -160,21 +164,37 @@ typedef void (*XInterruptHandler) (void *InstancePtr); */ typedef void (*XExceptionHandler) (void *InstancePtr); +/** + * UPPER_32_BITS - return bits 32-63 of a number + * @n: the number we're accessing + * + * A basic shift-right of a 64- or 32-bit quantity. Use this to suppress + * the "right shift count >= width of type" warning when that quantity is + * 32-bits. + */ +#define UPPER_32_BITS(n) ((u32)(((n) >> 16) >> 16)) + +/** + * LOWER_32_BITS - return bits 0-31 of a number + * @n: the number we're accessing + */ +#define LOWER_32_BITS(n) ((u32)(n)) + /*@}*/ /************************** Constant Definitions *****************************/ #ifndef TRUE -#define TRUE 1 +#define TRUE 1U #endif #ifndef FALSE -#define FALSE 0 +#define FALSE 0U #endif #ifndef NULL -#define NULL 0 +#define NULL 0U #endif #endif /* end of protection macro */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_stats.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xplatform_info.c similarity index 61% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_stats.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xplatform_info.c index fbf55ce6a..fea992e40 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_stats.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xplatform_info.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2014 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -32,81 +32,102 @@ /*****************************************************************************/ /** * -* @file xtmrctr_stats.c +* @file xplatform_info.c * -* Contains function to get and clear statistics for the XTmrCtr component. +* This file contains information about hardware for which the code is built * *
 * MODIFICATION HISTORY:
 *
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00b jhl  02/06/02 First release.
-* 1.10b mta  03/21/07 Updated for new coding style.
-* 2.00a ktn  10/30/09 Updated to use HAL API's.
+* Ver   Who    Date   Changes
+* ----- ---- -------- -------------------------------------------------------
+* 5.00  pkp  12/15/14 Initial release
+* 5.04  pkp  01/12/16 Added platform information support for Cortex-A53 32bit
+*					  mode
 * 
* ******************************************************************************/ /***************************** Include Files *********************************/ -#include "xtmrctr.h" +#include "xil_types.h" +#include "xplatform_info.h" /************************** Constant Definitions *****************************/ - /**************************** Type Definitions *******************************/ - /***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - - /************************** Variable Definitions *****************************/ +/************************** Function Prototypes ******************************/ + /*****************************************************************************/ /** * -* Get a copy of the XTmrCtrStats structure, which contains the current -* statistics for this driver. +* This API is used to provide information about platform * -* @param InstancePtr is a pointer to the XTmrCtr instance. -* @param StatsPtr is a pointer to a XTmrCtrStats structure which will get -* a copy of current statistics. +* @param None. * -* @return None. +* @return The information about platform defined in xplatform_info.h * -* @note None. +* @note None. * ******************************************************************************/ -void XTmrCtr_GetStats(XTmrCtr * InstancePtr, XTmrCtrStats * StatsPtr) +u32 XGetPlatform_Info() { - Xil_AssertVoid(InstancePtr != NULL); - Xil_AssertVoid(StatsPtr != NULL); - Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - StatsPtr->Interrupts = InstancePtr->Stats.Interrupts; + u32 reg; +#if defined (ARMR5) || (__aarch64__) || (ARMA53_32) + return XPLAT_ZYNQ_ULTRA_MP; +#elif (__microblaze__) + return XPLAT_MICROBLAZE; +#else + return XPLAT_ZYNQ; +#endif } /*****************************************************************************/ /** * -* Clear the XTmrCtrStats structure for this driver. +* This API is used to provide information about zynq ultrascale MP platform * -* @param InstancePtr is a pointer to the XTmrCtr instance. +* @param None. * -* @return None. +* @return The information about zynq ultrascale MP platform defined in +* xplatform_info.h * -* @note None. +* @note None. * ******************************************************************************/ -void XTmrCtr_ClearStats(XTmrCtr * InstancePtr) +#if defined (ARMR5) || (__aarch64__) || (ARMA53_32) +u32 XGet_Zynq_UltraMp_Platform_info() { - Xil_AssertVoid(InstancePtr != NULL); - Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + u32 reg; + reg = ((Xil_In32(XPAR_CSU_BASEADDR + XPAR_CSU_VER_OFFSET) >> 12U )& XPLAT_INFO_MASK); + return reg; +} +#endif - InstancePtr->Stats.Interrupts = 0; +/*****************************************************************************/ +/** +* +* This API is used to provide information about PS Silicon version +* +* @param None. +* +* @return The information about PS Silicon version. +* +* @note None. +* +******************************************************************************/ +#if defined (ARMR5) || (__aarch64__) || (ARMA53_32) +u32 XGetPSVersion_Info() +{ + u32 reg; + reg = (Xil_In32(XPAR_CSU_BASEADDR + XPAR_CSU_VER_OFFSET) + & XPS_VERSION_INFO_MASK); + return reg; } +#endif diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_i.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xplatform_info.h similarity index 69% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_i.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xplatform_info.h index 362eeeff6..7028a83af 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/intc_v3_2/src/xintc_i.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xplatform_info.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2014 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -32,28 +32,14 @@ /*****************************************************************************/ /** * -* @file xintc_i.h +* @file xplatform_info.h * -* This file contains data which is shared between files and internal to the -* XIntc component. It is intended for internal use only. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -------------------------------------------------------
-* 1.00b jhl  02/06/02 First release
-* 1.00b jhl  04/24/02 Moved register definitions to xintc_l.h
-* 1.00c rpm  10/17/03 New release. Removed extern of global, single instance
-*                     pointer.
-* 1.10c mta  03/21/07 Updated to new coding style
-* 2.00a ktn  10/20/09 Updated to use HAL Processor APIs.
-* 
+* This file contains definitions for various platforms available * ******************************************************************************/ -#ifndef XINTC_I_H /* prevent circular inclusions */ -#define XINTC_I_H /* by using protection macros */ +#ifndef XPLATFORM_INFO_H /* prevent circular inclusions */ +#define XPLATFORM_INFO_H /* by using protection macros */ #ifdef __cplusplus extern "C" { @@ -62,29 +48,44 @@ extern "C" { /***************************** Include Files *********************************/ #include "xil_types.h" -#include "xil_assert.h" -#include "xintc.h" /************************** Constant Definitions *****************************/ +#define XPAR_CSU_BASEADDR 0xFFCA0000U +#define XPAR_CSU_VER_OFFSET 0x00000044U -/**************************** Type Definitions *******************************/ +#define XPLAT_ZYNQ_ULTRA_MP_SILICON 0x0 +#define XPLAT_ZYNQ_ULTRA_MP 0x1 +#define XPLAT_ZYNQ_ULTRA_MPVEL 0x2 +#define XPLAT_ZYNQ_ULTRA_MPQEMU 0x3 +#define XPLAT_ZYNQ 0x4 +#define XPLAT_MICROBLAZE 0x5 +#define XPS_VERSION_1 0x0 +#define XPS_VERSION_2 0x1 -/***************** Macros (Inline Functions) Definitions *********************/ +#define XPLAT_INFO_MASK (0xF) +#define XPS_VERSION_INFO_MASK (0xF) +/**************************** Type Definitions *******************************/ + +/***************** Macros (Inline Functions) Definitions *********************/ -/************************** Function Prototypes ******************************/ +u32 XGetPlatform_Info(); -/************************** Variable Definitions *****************************/ +#if defined (ARMR5) || (__aarch64__) || (ARMA53_32) +u32 XGetPSVersion_Info(); +#endif -extern u32 XIntc_BitPosMask[]; +#if defined (ARMR5) || (__aarch64__) || (ARMA53_32) +u32 XGet_Zynq_UltraMp_Platform_info(); +#endif +/************************** Function Prototypes ******************************/ -extern XIntc_Config XIntc_ConfigTable[]; #ifdef __cplusplus } #endif -#endif +#endif /* end of protection macro */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xstatus.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xstatus.h similarity index 99% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xstatus.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xstatus.h index 4452bb833..3c8670cb3 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v4_2/src/xstatus.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/standalone_v5_4/src/xstatus.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -416,7 +416,7 @@ extern "C" { /**************************** Type Definitions *******************************/ -typedef int XStatus; +typedef s32 XStatus; /***************** Macros (Inline Functions) Definitions *********************/ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/Makefile b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/Makefile deleted file mode 100644 index 20fb57c34..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -COMPILER= -ARCHIVER= -CP=cp -COMPILER_FLAGS= -EXTRA_COMPILER_FLAGS= -LIB=libxil.a - -RELEASEDIR=../../../lib -INCLUDEDIR=../../../include -INCLUDES=-I./. -I${INCLUDEDIR} - -OUTS = *.o - -LIBSOURCES=*.c -INCLUDEFILES=*.h - -libs: - echo "Compiling tmrctr" - $(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES) - $(ARCHIVER) -r ${RELEASEDIR}/${LIB} ${OUTS} - make clean - -include: - ${CP} $(INCLUDEFILES) $(INCLUDEDIR) - -clean: - rm -rf ${OUTS} - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr.c deleted file mode 100644 index 90e8c5bb1..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr.c +++ /dev/null @@ -1,522 +0,0 @@ -/****************************************************************************** -* -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xtmrctr.c -* -* Contains required functions for the XTmrCtr driver. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00a ecm  08/16/01 First release
-* 1.00b jhl  02/21/02 Repartitioned the driver for smaller files
-* 1.10b mta  03/21/07 Updated to new coding style
-* 2.00a ktn  10/30/09 Updated to use HAL API's. _m is removed from all the macro
-*		      definitions.
-* 2.05a adk  15/05/13 Fixed the CR:693066
-*		      Added the IsStartedTmrCtr0/IsStartedTmrCtr1 members to the
-*		      XTmrCtr instance structure.
-*		      The IsStartedTmrCtrX will be assigned XIL_COMPONENT_IS_STARTED in
-*		      the XTmrCtr_Start function.
-*		      The IsStartedTmrCtrX will be cleared in the XTmrCtr_Stop function.
-*		      There will be no Initialization done in the
-*		      XTmrCtr_Initialize if both the timers have already started and
-*		      the XST_DEVICE_IS_STARTED Status is returned.
-*		      Removed the logic in the XTmrCtr_Initialize function
-*		      which was checking the Register Value to know whether
-*		      a timer has started or not.
-* 
-* -******************************************************************************/ - -/***************************** Include Files *********************************/ - -#include "xstatus.h" -#include "xparameters.h" -#include "xtmrctr.h" -#include "xtmrctr_i.h" - -/************************** Constant Definitions *****************************/ - - -/**************************** Type Definitions *******************************/ - - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - - -/************************** Variable Definitions *****************************/ - - -/*****************************************************************************/ -/** -* -* Initializes a specific timer/counter instance/driver. Initialize fields of -* the XTmrCtr structure, then reset the timer/counter.If a timer is already -* running then it is not initialized. -* -* -* @param InstancePtr is a pointer to the XTmrCtr instance. -* @param DeviceId is the unique id of the device controlled by this -* XTmrCtr component. Passing in a device id associates the -* generic XTmrCtr component to a specific device, as chosen by -* the caller or application developer. -* -* @return -* - XST_SUCCESS if initialization was successful -* - XST_DEVICE_IS_STARTED if the device has already been started -* - XST_DEVICE_NOT_FOUND if the device doesn't exist -* -* @note None. -* -******************************************************************************/ -int XTmrCtr_Initialize(XTmrCtr * InstancePtr, u16 DeviceId) -{ - XTmrCtr_Config *TmrCtrConfigPtr; - int TmrCtrNumber; - int TmrCtrLowIndex = 0; - int TmrCtrHighIndex = XTC_DEVICE_TIMER_COUNT; - - Xil_AssertNonvoid(InstancePtr != NULL); - - - /* - * If both the timers have already started, disallow the initialize and - * return a status indicating it is started. This allows the user to stop - * the device and reinitialize, but prevents a user from inadvertently - * initializing. - * In case one of the timers has not started then that particular timer - * will be initialized - */ - if ((InstancePtr->IsStartedTmrCtr0 == XIL_COMPONENT_IS_STARTED) && - (InstancePtr->IsStartedTmrCtr1 == XIL_COMPONENT_IS_STARTED)) { - return XST_DEVICE_IS_STARTED; - } - - - /* - * Ensure that only the timer which is NOT started can be initialized - */ - if ((InstancePtr->IsStartedTmrCtr0 == XIL_COMPONENT_IS_STARTED)) { - TmrCtrLowIndex = 1; - } else if ((InstancePtr->IsStartedTmrCtr1 == XIL_COMPONENT_IS_STARTED)) { - TmrCtrHighIndex = 1; - } else { - InstancePtr->IsStartedTmrCtr0 = 0; - InstancePtr->IsStartedTmrCtr1 = 0; - } - - - - /* - * Lookup the device configuration in the temporary CROM table. Use this - * configuration info down below when initializing this component. - */ - TmrCtrConfigPtr = XTmrCtr_LookupConfig(DeviceId); - - if (TmrCtrConfigPtr == (XTmrCtr_Config *) NULL) { - return XST_DEVICE_NOT_FOUND; - } - - /* - * Set some default values, including setting the callback - * handlers to stubs. - */ - InstancePtr->BaseAddress = TmrCtrConfigPtr->BaseAddress; - InstancePtr->Handler = NULL; - InstancePtr->CallBackRef = NULL; - - /* - * Clear the statistics for this driver - */ - InstancePtr->Stats.Interrupts = 0; - - /* Initialize the registers of each timer/counter in the device */ - - for (TmrCtrNumber = TmrCtrLowIndex; TmrCtrNumber < TmrCtrHighIndex; - TmrCtrNumber++) { - - /* - * Set the Compare register to 0 - */ - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TLR_OFFSET, 0); - /* - * Reset the timer and the interrupt, the reset bit will need to - * be cleared after this - */ - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TCSR_OFFSET, - XTC_CSR_INT_OCCURED_MASK | XTC_CSR_LOAD_MASK); - /* - * Set the control/status register to complete initialization by - * clearing the reset bit which was just set - */ - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TCSR_OFFSET, 0); - } - - /* - * Indicate the instance is ready to use, successfully initialized - */ - InstancePtr->IsReady = XIL_COMPONENT_IS_READY; - - return XST_SUCCESS; -} - -/*****************************************************************************/ -/** -* -* Starts the specified timer counter of the device such that it starts running. -* The timer counter is reset before it is started and the reset value is -* loaded into the timer counter. -* -* If interrupt mode is specified in the options, it is necessary for the caller -* to connect the interrupt handler of the timer/counter to the interrupt source, -* typically an interrupt controller, and enable the interrupt within the -* interrupt controller. -* -* @param InstancePtr is a pointer to the XTmrCtr instance. -* @param TmrCtrNumber is the timer counter of the device to operate on. -* Each device may contain multiple timer counters. The timer -* number is a zero based number with a range of -* 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return None. -* -* @note None. -* -******************************************************************************/ -void XTmrCtr_Start(XTmrCtr * InstancePtr, u8 TmrCtrNumber) -{ - u32 ControlStatusReg; - - Xil_AssertVoid(InstancePtr != NULL); - Xil_AssertVoid(TmrCtrNumber < XTC_DEVICE_TIMER_COUNT); - Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - /* - * Read the current register contents such that only the necessary bits - * of the register are modified in the following operations - */ - ControlStatusReg = XTmrCtr_ReadReg(InstancePtr->BaseAddress, - TmrCtrNumber, XTC_TCSR_OFFSET); - /* - * Reset the timer counter such that it reloads from the compare - * register and the interrupt is cleared simultaneously, the interrupt - * can only be cleared after reset such that the interrupt condition is - * cleared - */ - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TCSR_OFFSET, - XTC_CSR_LOAD_MASK); - - - - /* - * Indicate that the timer is started before enabling it - */ - if (TmrCtrNumber == 0) { - InstancePtr->IsStartedTmrCtr0 = XIL_COMPONENT_IS_STARTED; - } else { - InstancePtr->IsStartedTmrCtr1 = XIL_COMPONENT_IS_STARTED; - } - - - /* - * Remove the reset condition such that the timer counter starts running - * with the value loaded from the compare register - */ - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TCSR_OFFSET, - ControlStatusReg | XTC_CSR_ENABLE_TMR_MASK); -} - -/*****************************************************************************/ -/** -* -* Stops the timer counter by disabling it. -* -* It is the callers' responsibility to disconnect the interrupt handler of the -* timer_counter from the interrupt source, typically an interrupt controller, -* and disable the interrupt within the interrupt controller. -* -* @param InstancePtr is a pointer to the XTmrCtr instance. -* @param TmrCtrNumber is the timer counter of the device to operate on. -* Each device may contain multiple timer counters. The timer -* number is a zero based number with a range of -* 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return None. -* -* @note None. -* -******************************************************************************/ -void XTmrCtr_Stop(XTmrCtr * InstancePtr, u8 TmrCtrNumber) -{ - u32 ControlStatusReg; - - Xil_AssertVoid(InstancePtr != NULL); - Xil_AssertVoid(TmrCtrNumber < XTC_DEVICE_TIMER_COUNT); - Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - /* - * Read the current register contents - */ - ControlStatusReg = XTmrCtr_ReadReg(InstancePtr->BaseAddress, - TmrCtrNumber, XTC_TCSR_OFFSET); - /* - * Disable the timer counter such that it's not running - */ - ControlStatusReg &= ~(XTC_CSR_ENABLE_TMR_MASK); - - /* - * Write out the updated value to the actual register. - */ - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TCSR_OFFSET, ControlStatusReg); - - /* - * Indicate that the timer is stopped - */ - if (TmrCtrNumber == 0) { - InstancePtr->IsStartedTmrCtr0 = 0; - } else { - InstancePtr->IsStartedTmrCtr1 = 0; - } -} - -/*****************************************************************************/ -/** -* -* Get the current value of the specified timer counter. The timer counter -* may be either incrementing or decrementing based upon the current mode of -* operation. -* -* @param InstancePtr is a pointer to the XTmrCtr instance. -* @param TmrCtrNumber is the timer counter of the device to operate on. -* Each device may contain multiple timer counters. The timer -* number is a zero based number with a range of -* 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return The current value for the timer counter. -* -* @note None. -* -******************************************************************************/ -u32 XTmrCtr_GetValue(XTmrCtr * InstancePtr, u8 TmrCtrNumber) -{ - - Xil_AssertNonvoid(InstancePtr != NULL); - Xil_AssertNonvoid(TmrCtrNumber < XTC_DEVICE_TIMER_COUNT); - Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - return XTmrCtr_ReadReg(InstancePtr->BaseAddress, - TmrCtrNumber, XTC_TCR_OFFSET); -} - -/*****************************************************************************/ -/** -* -* Set the reset value for the specified timer counter. This is the value -* that is loaded into the timer counter when it is reset. This value is also -* loaded when the timer counter is started. -* -* @param InstancePtr is a pointer to the XTmrCtr instance. -* @param TmrCtrNumber is the timer counter of the device to operate on. -* Each device may contain multiple timer counters. The timer -* number is a zero based number with a range of -* 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* @param ResetValue contains the value to be used to reset the timer -* counter. -* -* @return None. -* -* @note None. -* -******************************************************************************/ -void XTmrCtr_SetResetValue(XTmrCtr * InstancePtr, u8 TmrCtrNumber, - u32 ResetValue) -{ - - Xil_AssertVoid(InstancePtr != NULL); - Xil_AssertVoid(TmrCtrNumber < XTC_DEVICE_TIMER_COUNT); - Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TLR_OFFSET, ResetValue); -} - -/*****************************************************************************/ -/** -* -* Returns the timer counter value that was captured the last time the external -* capture input was asserted. -* -* @param InstancePtr is a pointer to the XTmrCtr instance. -* @param TmrCtrNumber is the timer counter of the device to operate on. -* Each device may contain multiple timer counters. The timer -* number is a zero based number with a range of -* 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return The current capture value for the indicated timer counter. -* -* @note None. -* -*******************************************************************************/ -u32 XTmrCtr_GetCaptureValue(XTmrCtr * InstancePtr, u8 TmrCtrNumber) -{ - - Xil_AssertNonvoid(InstancePtr != NULL); - Xil_AssertNonvoid(TmrCtrNumber < XTC_DEVICE_TIMER_COUNT); - Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - return XTmrCtr_ReadReg(InstancePtr->BaseAddress, - TmrCtrNumber, XTC_TLR_OFFSET); -} - -/*****************************************************************************/ -/** -* -* Resets the specified timer counter of the device. A reset causes the timer -* counter to set it's value to the reset value. -* -* @param InstancePtr is a pointer to the XTmrCtr instance. -* @param TmrCtrNumber is the timer counter of the device to operate on. -* Each device may contain multiple timer counters. The timer -* number is a zero based number with a range of -* 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return None. -* -* @note None. -* -******************************************************************************/ -void XTmrCtr_Reset(XTmrCtr * InstancePtr, u8 TmrCtrNumber) -{ - u32 CounterControlReg; - - Xil_AssertVoid(InstancePtr != NULL); - Xil_AssertVoid(TmrCtrNumber < XTC_DEVICE_TIMER_COUNT); - Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - /* - * Read current contents of the register so it won't be destroyed - */ - CounterControlReg = XTmrCtr_ReadReg(InstancePtr->BaseAddress, - TmrCtrNumber, XTC_TCSR_OFFSET); - /* - * Reset the timer by toggling the reset bit in the register - */ - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TCSR_OFFSET, - CounterControlReg | XTC_CSR_LOAD_MASK); - - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TCSR_OFFSET, CounterControlReg); -} - -/*****************************************************************************/ -/** -* -* Checks if the specified timer counter of the device has expired. In capture -* mode, expired is defined as a capture occurred. In compare mode, expired is -* defined as the timer counter rolled over/under for up/down counting. -* -* When interrupts are enabled, the expiration causes an interrupt. This function -* is typically used to poll a timer counter to determine when it has expired. -* -* @param InstancePtr is a pointer to the XTmrCtr instance. -* @param TmrCtrNumber is the timer counter of the device to operate on. -* Each device may contain multiple timer counters. The timer -* number is a zero based number with a range of -* 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return TRUE if the timer has expired, and FALSE otherwise. -* -* @note None. -* -******************************************************************************/ -int XTmrCtr_IsExpired(XTmrCtr * InstancePtr, u8 TmrCtrNumber) -{ - u32 CounterControlReg; - - Xil_AssertNonvoid(InstancePtr != NULL); - Xil_AssertNonvoid(TmrCtrNumber < XTC_DEVICE_TIMER_COUNT); - Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - /* - * Check if timer is expired - */ - CounterControlReg = XTmrCtr_ReadReg(InstancePtr->BaseAddress, - TmrCtrNumber, XTC_TCSR_OFFSET); - - return ((CounterControlReg & XTC_CSR_INT_OCCURED_MASK) == - XTC_CSR_INT_OCCURED_MASK); -} - -/***************************************************************************** -* -* Looks up the device configuration based on the unique device ID. The table -* TmrCtrConfigTable contains the configuration info for each device in the -* system. -* -* @param DeviceId is the unique device ID to search for in the config -* table. -* -* @return A pointer to the configuration that matches the given device ID, -* or NULL if no match is found. -* -* @note None. -* -******************************************************************************/ -XTmrCtr_Config *XTmrCtr_LookupConfig(u16 DeviceId) -{ - XTmrCtr_Config *CfgPtr = NULL; - int Index; - - for (Index = 0; Index < XPAR_XTMRCTR_NUM_INSTANCES; Index++) { - if (XTmrCtr_ConfigTable[Index].DeviceId == DeviceId) { - CfgPtr = &XTmrCtr_ConfigTable[Index]; - break; - } - } - - return CfgPtr; -} diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr.h deleted file mode 100644 index 1f6726570..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr.h +++ /dev/null @@ -1,301 +0,0 @@ -/****************************************************************************** -* -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xtmrctr.h -* -* The Xilinx timer/counter component. This component supports the Xilinx -* timer/counter. More detailed description of the driver operation can -* be found in the xtmrctr.c file. -* -* The Xilinx timer/counter supports the following features: -* - Polled mode. -* - Interrupt driven mode -* - enabling and disabling specific timers -* - PWM operation -* - Cascade Operation (This is to be used for getting a 64 bit timer and this -* feature is present in the latest versions of the axi_timer IP) -* -* The driver does not currently support the PWM operation of the device. -* -* The timer counter operates in 2 primary modes, compare and capture. In -* either mode, the timer counter may count up or down, with up being the -* default. -* -* Compare mode is typically used for creating a single time period or multiple -* repeating time periods in the auto reload mode, such as a periodic interrupt. -* When started, the timer counter loads an initial value, referred to as the -* compare value, into the timer counter and starts counting down or up. The -* timer counter expires when it rolls over/under depending upon the mode of -* counting. An external compare output signal may be configured such that a -* pulse is generated with this signal when it hits the compare value. -* -* Capture mode is typically used for measuring the time period between -* external events. This mode uses an external capture input signal to cause -* the value of the timer counter to be captured. When started, the timer -* counter loads an initial value, referred to as the compare value, - -* The timer can be configured to either cause an interrupt when the count -* reaches the compare value in compare mode or latch the current count -* value in the capture register when an external input is asserted -* in capture mode. The external capture input can be enabled/disabled using the -* XTmrCtr_SetOptions function. While in compare mode, it is also possible to -* drive an external output when the compare value is reached in the count -* register The external compare output can be enabled/disabled using the -* XTmrCtr_SetOptions function. -* -* Interrupts -* -* It is the responsibility of the application to connect the interrupt -* handler of the timer/counter to the interrupt source. The interrupt -* handler function, XTmrCtr_InterruptHandler, is visible such that the user -* can connect it to the interrupt source. Note that this interrupt handler -* does not provide interrupt context save and restore processing, the user -* must perform this processing. -* -* The driver services interrupts and passes timeouts to the upper layer -* software through callback functions. The upper layer software must register -* its callback functions during initialization. The driver requires callback -* functions for timers. -* -* @note -* The default settings for the timers are: -* - Interrupt generation disabled -* - Count up mode -* - Compare mode -* - Hold counter (will not reload the timer) -* - External compare output disabled -* - External capture input disabled -* - Pulse width modulation disabled -* - Timer disabled, waits for Start function to be called -*

-* A timer counter device may contain multiple timer counters. The symbol -* XTC_DEVICE_TIMER_COUNT defines the number of timer counters in the device. -* The device currently contains 2 timer counters. -*

-* This driver is intended to be RTOS and processor independent. It works with -* physical addresses only. Any needs for dynamic memory management, threads -* or thread mutual exclusion, virtual memory, or cache control must be -* satisfied by the layer above this driver. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00a ecm  08/16/01 First release
-* 1.00b jhl  02/21/02 Repartitioned the driver for smaller files
-* 1.10b mta  03/21/07 Updated to new coding style.
-* 1.11a sdm  08/22/08 Removed support for static interrupt handlers from the MDD
-*		      file
-* 2.00a ktn  10/30/09 Updated to use HAL API's. _m is removed from all the macro
-*		      definitions.
-* 2.01a ktn  07/12/10 Renamed the macro XTimerCtr_ReadReg as XTmrCtr_ReadReg
-*		      for naming consistency (CR 559142).
-* 2.02a sdm  09/28/10 Updated the driver tcl to generate the xparameters
-*		      for the timer clock frequency (CR 572679).
-* 2.03a rvo  11/30/10 Added check to see if interrupt is enabled before further
-*		      processing for CR 584557.
-* 2.04a sdm  07/12/11 Added support for cascade mode operation.
-* 		      The cascade mode of operation is present in the latest
-*		      versions of the axi_timer IP. Please check the HW
-*		      Datasheet to see whether this feature is present in the
-*		      version of the IP that you are using.
-* 2.05a adk  15/05/13 Fixed the CR:693066
-*		      Added the IsStartedTmrCtr0/IsStartedTmrCtr1 members to the
-*		      XTmrCtr instance structure.
-*		      The IsStartedTmrCtrX will be assigned XIL_COMPONENT_IS_STARTED in
-*		      the XTmrCtr_Start function.
-*		      The IsStartedTmrCtrX will be cleared in the XTmrCtr_Stop function.
-*		      There will be no Initialization done in the
-*		      XTmrCtr_Initialize if both the timers have already started and
-*		      the XST_DEVICE_IS_STARTED Status is returned.
-*		      Removed the logic in the XTmrCtr_Initialize function
-*		      which was checking the Register Value to know whether
-*		      a timer has started or not.
-* 3.0   adk  19/12/13 Updated as per the New Tcl API's
-* 
-* -******************************************************************************/ - -#ifndef XTMRCTR_H /* prevent circular inclusions */ -#define XTMRCTR_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ - -#include "xil_types.h" -#include "xil_assert.h" -#include "xstatus.h" -#include "xtmrctr_l.h" - -/************************** Constant Definitions *****************************/ - -/** - * @name Configuration options - * These options are used in XTmrCtr_SetOptions() and XTmrCtr_GetOptions() - * @{ - */ -/** - * Used to configure the timer counter device. - *
- * XTC_CASCADE_MODE_OPTION	Enables the Cascade Mode only valid for TCSRO.
- * XTC_ENABLE_ALL_OPTION	Enables all timer counters at once.
- * XTC_DOWN_COUNT_OPTION	Configures the timer counter to count down from
- *				start value, the default is to count up.
- * XTC_CAPTURE_MODE_OPTION	Configures the timer to capture the timer
- *				counter value when the external capture line is
- *				asserted. The default mode is compare mode.
- * XTC_INT_MODE_OPTION		Enables the timer counter interrupt output.
- * XTC_AUTO_RELOAD_OPTION	In compare mode, configures the timer counter to
- *				reload from the compare value. The default mode
- *				causes the timer counter to hold when the
- *				compare value is hit.
- *				In capture mode, configures the timer counter to
- *				not hold the previous capture value if a new
- *				event occurs. The default mode cause the timer
- *				counter to hold the capture value until
- *				recognized.
- * XTC_EXT_COMPARE_OPTION	Enables the external compare output signal.
- * 
- */ -#define XTC_CASCADE_MODE_OPTION 0x00000080UL -#define XTC_ENABLE_ALL_OPTION 0x00000040UL -#define XTC_DOWN_COUNT_OPTION 0x00000020UL -#define XTC_CAPTURE_MODE_OPTION 0x00000010UL -#define XTC_INT_MODE_OPTION 0x00000008UL -#define XTC_AUTO_RELOAD_OPTION 0x00000004UL -#define XTC_EXT_COMPARE_OPTION 0x00000002UL -/*@}*/ - -/**************************** Type Definitions *******************************/ - -/** - * This typedef contains configuration information for the device. - */ -typedef struct { - u16 DeviceId; /**< Unique ID of device */ - u32 BaseAddress;/**< Register base address */ -} XTmrCtr_Config; - -/** - * Signature for the callback function. - * - * @param CallBackRef is a callback reference passed in by the upper layer - * when setting the callback functions, and passed back to the - * upper layer when the callback is invoked. Its type is - * unimportant to the driver, so it is a void pointer. - * @param TmrCtrNumber is the number of the timer/counter within the - * device. The device typically contains at least two - * timer/counters. The timer number is a zero based number with a - * range of 0 to (XTC_DEVICE_TIMER_COUNT - 1). - */ -typedef void (*XTmrCtr_Handler) (void *CallBackRef, u8 TmrCtrNumber); - - -/** - * Timer/Counter statistics - */ -typedef struct { - u32 Interrupts; /**< The number of interrupts that have occurred */ -} XTmrCtrStats; - -/** - * The XTmrCtr driver instance data. The user is required to allocate a - * variable of this type for every timer/counter device in the system. A - * pointer to a variable of this type is then passed to the driver API - * functions. - */ -typedef struct { - XTmrCtrStats Stats; /**< Component Statistics */ - u32 BaseAddress; /**< Base address of registers */ - u32 IsReady; /**< Device is initialized and ready */ - u32 IsStartedTmrCtr0; /**< Is Timer Counter 0 started */ - u32 IsStartedTmrCtr1; /**< Is Timer Counter 1 started */ - - XTmrCtr_Handler Handler; /**< Callback function */ - void *CallBackRef; /**< Callback reference for handler */ -} XTmrCtr; - - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - -/* - * Required functions, in file xtmrctr.c - */ -int XTmrCtr_Initialize(XTmrCtr * InstancePtr, u16 DeviceId); -void XTmrCtr_Start(XTmrCtr * InstancePtr, u8 TmrCtrNumber); -void XTmrCtr_Stop(XTmrCtr * InstancePtr, u8 TmrCtrNumber); -u32 XTmrCtr_GetValue(XTmrCtr * InstancePtr, u8 TmrCtrNumber); -void XTmrCtr_SetResetValue(XTmrCtr * InstancePtr, u8 TmrCtrNumber, - u32 ResetValue); -u32 XTmrCtr_GetCaptureValue(XTmrCtr * InstancePtr, u8 TmrCtrNumber); -int XTmrCtr_IsExpired(XTmrCtr * InstancePtr, u8 TmrCtrNumber); -void XTmrCtr_Reset(XTmrCtr * InstancePtr, u8 TmrCtrNumber); -XTmrCtr_Config *XTmrCtr_LookupConfig(u16 DeviceId); - -/* - * Functions for options, in file xtmrctr_options.c - */ -void XTmrCtr_SetOptions(XTmrCtr * InstancePtr, u8 TmrCtrNumber, u32 Options); -u32 XTmrCtr_GetOptions(XTmrCtr * InstancePtr, u8 TmrCtrNumber); - -/* - * Functions for statistics, in file xtmrctr_stats.c - */ -void XTmrCtr_GetStats(XTmrCtr * InstancePtr, XTmrCtrStats * StatsPtr); -void XTmrCtr_ClearStats(XTmrCtr * InstancePtr); - -/* - * Functions for self-test, in file xtmrctr_selftest.c - */ -int XTmrCtr_SelfTest(XTmrCtr * InstancePtr, u8 TmrCtrNumber); - -/* - * Functions for interrupts, in file xtmrctr_intr.c - */ -void XTmrCtr_SetHandler(XTmrCtr * InstancePtr, XTmrCtr_Handler FuncPtr, - void *CallBackRef); -void XTmrCtr_InterruptHandler(void *InstancePtr); - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_g.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_g.c deleted file mode 100644 index 002eff4d7..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_g.c +++ /dev/null @@ -1,55 +0,0 @@ - -/******************************************************************* -* -* CAUTION: This file is automatically generated by HSI. -* Version: -* DO NOT EDIT. -* -* Copyright (C) 2010-2015 Xilinx, Inc. All Rights Reserved.* -*Permission is hereby granted, free of charge, to any person obtaining a copy -*of this software and associated documentation files (the Software), to deal -*in the Software without restriction, including without limitation the rights -*to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -*copies of the Software, and to permit persons to whom the Software is -*furnished to do so, subject to the following conditions: -* -*The above copyright notice and this permission notice shall be included in -*all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -*(a) running on a Xilinx device, or -*(b) that interact with a Xilinx device through a bus or interconnect. -* -*THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -*IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -*XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -*WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT -*OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -* -*Except as contained in this notice, the name of the Xilinx shall not be used -*in advertising or otherwise to promote the sale, use or other dealings in -*this Software without prior written authorization from Xilinx. -* - -* -* Description: Driver configuration -* -*******************************************************************/ - -#include "xparameters.h" -#include "xtmrctr.h" - -/* -* The configuration table for devices -*/ - -XTmrCtr_Config XTmrCtr_ConfigTable[] = -{ - { - XPAR_AXI_TIMER_0_DEVICE_ID, - XPAR_AXI_TIMER_0_BASEADDR - } -}; - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_intr.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_intr.c deleted file mode 100644 index f36fb0bd3..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_intr.c +++ /dev/null @@ -1,230 +0,0 @@ -/****************************************************************************** -* -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xtmrctr_intr.c -* -* Contains interrupt-related functions for the XTmrCtr component. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00b jhl  02/06/02 First release
-* 1.10b mta  03/21/07 Updated to new coding style
-* 2.00a ktn  10/30/09 Updated to use HAL API's. _m is removed from all the macro
-*		      definitions.
-* 2.03a rvo  11/30/10 Added check to see if interrupt is enabled before further
-*		      processing for CR 584557.
-* 
-* -******************************************************************************/ - -/***************************** Include Files *********************************/ - -#include "xtmrctr.h" - - -/************************** Constant Definitions *****************************/ - - -/**************************** Type Definitions *******************************/ - - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - - -/************************** Variable Definitions *****************************/ - - -/*****************************************************************************/ -/** -* -* Sets the timer callback function, which the driver calls when the specified -* timer times out. -* -* @param InstancePtr is a pointer to the XTmrCtr instance . -* @param CallBackRef is the upper layer callback reference passed back -* when the callback function is invoked. -* @param FuncPtr is the pointer to the callback function. -* -* @return None. -* -* @note -* -* The handler is called within interrupt context so the function that is -* called should either be short or pass the more extensive processing off -* to another task to allow the interrupt to return and normal processing -* to continue. -* -******************************************************************************/ -void XTmrCtr_SetHandler(XTmrCtr * InstancePtr, XTmrCtr_Handler FuncPtr, - void *CallBackRef) -{ - Xil_AssertVoid(InstancePtr != NULL); - Xil_AssertVoid(FuncPtr != NULL); - Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - InstancePtr->Handler = FuncPtr; - InstancePtr->CallBackRef = CallBackRef; -} - -/*****************************************************************************/ -/** -* -* Interrupt Service Routine (ISR) for the driver. This function only performs -* processing for the device and does not save and restore the interrupt context. -* -* @param InstancePtr contains a pointer to the timer/counter instance for -* the interrupt. -* -* @return None. -* -* @note None. -* -******************************************************************************/ -void XTmrCtr_InterruptHandler(void *InstancePtr) -{ - XTmrCtr *TmrCtrPtr = NULL; - u8 TmrCtrNumber; - u32 ControlStatusReg; - - /* - * Verify that each of the inputs are valid. - */ - Xil_AssertVoid(InstancePtr != NULL); - - /* - * Convert the non-typed pointer to an timer/counter instance pointer - * such that there is access to the timer/counter - */ - TmrCtrPtr = (XTmrCtr *) InstancePtr; - - /* - * Loop thru each timer counter in the device and call the callback - * function for each timer which has caused an interrupt - */ - for (TmrCtrNumber = 0; - TmrCtrNumber < XTC_DEVICE_TIMER_COUNT; TmrCtrNumber++) { - - ControlStatusReg = XTmrCtr_ReadReg(TmrCtrPtr->BaseAddress, - TmrCtrNumber, - XTC_TCSR_OFFSET); - /* - * Check if interrupt is enabled - */ - if (ControlStatusReg & XTC_CSR_ENABLE_INT_MASK) { - - /* - * Check if timer expired and interrupt occured - */ - if (ControlStatusReg & XTC_CSR_INT_OCCURED_MASK) { - /* - * Increment statistics for the number of - * interrupts and call the callback to handle - * any application specific processing - */ - TmrCtrPtr->Stats.Interrupts++; - TmrCtrPtr->Handler(TmrCtrPtr->CallBackRef, - TmrCtrNumber); - /* - * Read the new Control/Status Register content. - */ - ControlStatusReg = - XTmrCtr_ReadReg(TmrCtrPtr->BaseAddress, - TmrCtrNumber, - XTC_TCSR_OFFSET); - /* - * If in compare mode and a single shot rather - * than auto reload mode then disable the timer - * and reset it such so that the interrupt can - * be acknowledged, this should be only temporary - * till the hardware is fixed - */ - if (((ControlStatusReg & - XTC_CSR_AUTO_RELOAD_MASK) == 0) && - ((ControlStatusReg & - XTC_CSR_CAPTURE_MODE_MASK)== 0)) { - /* - * Disable the timer counter and - * reset it such that the timer - * counter is loaded with the - * reset value allowing the - * interrupt to be acknowledged - */ - ControlStatusReg &= - ~XTC_CSR_ENABLE_TMR_MASK; - - XTmrCtr_WriteReg( - TmrCtrPtr->BaseAddress, - TmrCtrNumber, - XTC_TCSR_OFFSET, - ControlStatusReg | - XTC_CSR_LOAD_MASK); - - /* - * Clear the reset condition, - * the reset bit must be - * manually cleared by a 2nd write - * to the register - */ - XTmrCtr_WriteReg( - TmrCtrPtr->BaseAddress, - TmrCtrNumber, - XTC_TCSR_OFFSET, - ControlStatusReg); - } - - /* - * Acknowledge the interrupt by clearing the - * interrupt bit in the timer control status - * register, this is done after calling the - * handler so the application could call - * IsExpired, the interrupt is cleared by - * writing a 1 to the interrupt bit of the - * register without changing any of the other - * bits - */ - XTmrCtr_WriteReg(TmrCtrPtr->BaseAddress, - TmrCtrNumber, - XTC_TCSR_OFFSET, - ControlStatusReg | - XTC_CSR_INT_OCCURED_MASK); - } - } - } -} diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_l.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_l.c deleted file mode 100644 index acdb5d511..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_l.c +++ /dev/null @@ -1,76 +0,0 @@ -/****************************************************************************** -* -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xtmrctr_l.c -* -* This file contains low-level driver functions that can be used to access the -* device. The user should refer to the hardware device specification for more -* details of the device operation. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00b jhl  04/24/02 First release
-* 1.10b mta  03/21/07 Updated to new coding style
-* 2.00a ktn  10/30/09 Updated to use HAL API's
-* 
-* -******************************************************************************/ - - -/***************************** Include Files *********************************/ - -#include "xtmrctr_l.h" - -/************************** Constant Definitions *****************************/ - - -/**************************** Type Definitions *******************************/ - - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - - -/************************** Variable Definitions *****************************/ - -/* The following table contains the offset from the base address of a timer - * counter device for each timer counter. A single device may contain multiple - * timer counters and the functions specify which one to operate on. - */ -u8 XTmrCtr_Offsets[] = { 0, XTC_TIMER_COUNTER_OFFSET }; diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_l.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_l.h deleted file mode 100644 index 8d1a65f68..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_l.h +++ /dev/null @@ -1,426 +0,0 @@ -/****************************************************************************** -* -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xtmrctr_l.h -* -* This header file contains identifiers and low-level driver functions (or -* macros) that can be used to access the device. The user should refer to the -* hardware device specification for more details of the device operation. -* High-level driver functions are defined in xtmrctr.h. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00b jhl  04/24/02 First release
-* 1.10b mta  03/21/07 Updated to new coding style
-* 2.00a ktn  10/30/09 Updated to use HAL API's. _m is removed from all the macro
-*		      definitions.
-* 2.01a ktn  07/12/10 Renamed the macro XTimerCtr_ReadReg as XTmrCtr_ReadReg
-*		      for naming consistency (CR 559142).
-* 2.04a sdm  07/12/11 Added the CASC mode bit in the TCSRO register for the
-*		      cascade mode operation.
-*		      The cascade mode of operation is present in the latest
-*		      versions of the axi_timer IP. Please check the HW
-*		      Datasheet to see whether this feature is present in the
-*		      version of the IP that you are using.
-* 
-* -******************************************************************************/ - -#ifndef XTMRCTR_L_H /* prevent circular inclusions */ -#define XTMRCTR_L_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ - -#include "xil_types.h" -#include "xil_io.h" - -/************************** Constant Definitions *****************************/ - -/** - * Defines the number of timer counters within a single hardware device. This - * number is not currently parameterized in the hardware but may be in the - * future. - */ -#define XTC_DEVICE_TIMER_COUNT 2 - -/* Each timer counter consumes 16 bytes of address space */ - -#define XTC_TIMER_COUNTER_OFFSET 16 - -/** @name Register Offset Definitions - * Register offsets within a timer counter, there are multiple - * timer counters within a single device - * @{ - */ - -#define XTC_TCSR_OFFSET 0 /**< Control/Status register */ -#define XTC_TLR_OFFSET 4 /**< Load register */ -#define XTC_TCR_OFFSET 8 /**< Timer counter register */ - -/* @} */ - -/** @name Control Status Register Bit Definitions - * Control Status Register bit masks - * Used to configure the timer counter device. - * @{ - */ - -#define XTC_CSR_CASC_MASK 0x00000800 /**< Cascade Mode */ -#define XTC_CSR_ENABLE_ALL_MASK 0x00000400 /**< Enables all timer - counters */ -#define XTC_CSR_ENABLE_PWM_MASK 0x00000200 /**< Enables the Pulse Width - Modulation */ -#define XTC_CSR_INT_OCCURED_MASK 0x00000100 /**< If bit is set, an - interrupt has occured. - If set and '1' is - written to this bit - position, bit is - cleared. */ -#define XTC_CSR_ENABLE_TMR_MASK 0x00000080 /**< Enables only the - specific timer */ -#define XTC_CSR_ENABLE_INT_MASK 0x00000040 /**< Enables the interrupt - output. */ -#define XTC_CSR_LOAD_MASK 0x00000020 /**< Loads the timer using - the load value provided - earlier in the Load - Register, - XTC_TLR_OFFSET. */ -#define XTC_CSR_AUTO_RELOAD_MASK 0x00000010 /**< In compare mode, - configures - the timer counter to - reload from the - Load Register. The - default mode - causes the timer counter - to hold when the compare - value is hit. In capture - mode, configures the - timer counter to not - hold the previous - capture value if a new - event occurs. The - default mode cause the - timer counter to hold - the capture value until - recognized. */ -#define XTC_CSR_EXT_CAPTURE_MASK 0x00000008 /**< Enables the - external input - to the timer counter. */ -#define XTC_CSR_EXT_GENERATE_MASK 0x00000004 /**< Enables the - external generate output - for the timer. */ -#define XTC_CSR_DOWN_COUNT_MASK 0x00000002 /**< Configures the timer - counter to count down - from start value, the - default is to count - up.*/ -#define XTC_CSR_CAPTURE_MODE_MASK 0x00000001 /**< Enables the timer to - capture the timer - counter value when the - external capture line is - asserted. The default - mode is compare mode.*/ -/* @} */ - -/**************************** Type Definitions *******************************/ - -extern u8 XTmrCtr_Offsets[]; - -/***************** Macros (Inline Functions) Definitions *********************/ - -/*****************************************************************************/ -/** -* Read one of the timer counter registers. -* -* @param BaseAddress contains the base address of the timer counter -* device. -* @param TmrCtrNumber contains the specific timer counter within the -* device, a zero based number, 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* @param RegOffset contains the offset from the 1st register of the timer -* counter to select the specific register of the timer counter. -* -* @return The value read from the register, a 32 bit value. -* -* @note C-Style signature: -* u32 XTmrCtr_ReadReg(u32 BaseAddress, u8 TimerNumber, - unsigned RegOffset); -******************************************************************************/ -#define XTmrCtr_ReadReg(BaseAddress, TmrCtrNumber, RegOffset) \ - Xil_In32((BaseAddress) + XTmrCtr_Offsets[(TmrCtrNumber)] + \ - (RegOffset)) - -#ifndef XTimerCtr_ReadReg -#define XTimerCtr_ReadReg XTmrCtr_ReadReg -#endif - -/*****************************************************************************/ -/** -* Write a specified value to a register of a timer counter. -* -* @param BaseAddress is the base address of the timer counter device. -* @param TmrCtrNumber is the specific timer counter within the device, a -* zero based number, 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* @param RegOffset contain the offset from the 1st register of the timer -* counter to select the specific register of the timer counter. -* @param ValueToWrite is the 32 bit value to be written to the register. -* -* @note C-Style signature: -* void XTmrCtr_WriteReg(u32 BaseAddress, u8 TimerNumber, -* unsigned RegOffset, u32 ValueToWrite); -******************************************************************************/ -#define XTmrCtr_WriteReg(BaseAddress, TmrCtrNumber, RegOffset, ValueToWrite)\ - Xil_Out32(((BaseAddress) + XTmrCtr_Offsets[(TmrCtrNumber)] + \ - (RegOffset)), (ValueToWrite)) - -/****************************************************************************/ -/** -* -* Set the Control Status Register of a timer counter to the specified value. -* -* @param BaseAddress is the base address of the device. -* @param TmrCtrNumber is the specific timer counter within the device, a -* zero based number, 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* @param RegisterValue is the 32 bit value to be written to the register. -* -* @return None. -* -* @note C-Style signature: -* void XTmrCtr_SetControlStatusReg(u32 BaseAddress, -* u8 TmrCtrNumber,u32 RegisterValue); -*****************************************************************************/ -#define XTmrCtr_SetControlStatusReg(BaseAddress, TmrCtrNumber, RegisterValue)\ - XTmrCtr_WriteReg((BaseAddress), (TmrCtrNumber), XTC_TCSR_OFFSET, \ - (RegisterValue)) - -/****************************************************************************/ -/** -* -* Get the Control Status Register of a timer counter. -* -* @param BaseAddress is the base address of the device. -* @param TmrCtrNumber is the specific timer counter within the device, -* a zero based number, 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return The value read from the register, a 32 bit value. -* -* @note C-Style signature: -* u32 XTmrCtr_GetControlStatusReg(u32 BaseAddress, -* u8 TmrCtrNumber); -*****************************************************************************/ -#define XTmrCtr_GetControlStatusReg(BaseAddress, TmrCtrNumber) \ - XTmrCtr_ReadReg((BaseAddress), (TmrCtrNumber), XTC_TCSR_OFFSET) - -/****************************************************************************/ -/** -* -* Get the Timer Counter Register of a timer counter. -* -* @param BaseAddress is the base address of the device. -* @param TmrCtrNumber is the specific timer counter within the device, -* a zero based number, 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return The value read from the register, a 32 bit value. -* -* @note C-Style signature: -* u32 XTmrCtr_GetTimerCounterReg(u32 BaseAddress, -* u8 TmrCtrNumber); -*****************************************************************************/ -#define XTmrCtr_GetTimerCounterReg(BaseAddress, TmrCtrNumber) \ - XTmrCtr_ReadReg((BaseAddress), (TmrCtrNumber), XTC_TCR_OFFSET) \ - -/****************************************************************************/ -/** -* -* Set the Load Register of a timer counter to the specified value. -* -* @param BaseAddress is the base address of the device. -* @param TmrCtrNumber is the specific timer counter within the device, a -* zero based number, 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* @param RegisterValue is the 32 bit value to be written to the register. -* -* @return None. -* -* @note C-Style signature: -* void XTmrCtr_SetLoadReg(u32 BaseAddress, u8 TmrCtrNumber, -* u32 RegisterValue); -*****************************************************************************/ -#define XTmrCtr_SetLoadReg(BaseAddress, TmrCtrNumber, RegisterValue) \ - XTmrCtr_WriteReg((BaseAddress), (TmrCtrNumber), XTC_TLR_OFFSET, \ - (RegisterValue)) - -/****************************************************************************/ -/** -* -* Get the Load Register of a timer counter. -* -* @param BaseAddress is the base address of the device. -* @param TmrCtrNumber is the specific timer counter within the device, a -* zero based number, 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return The value read from the register, a 32 bit value. -* -* @note C-Style signature: -* u32 XTmrCtr_GetLoadReg(u32 BaseAddress, u8 TmrCtrNumber); -*****************************************************************************/ -#define XTmrCtr_GetLoadReg(BaseAddress, TmrCtrNumber) \ -XTmrCtr_ReadReg((BaseAddress), (TmrCtrNumber), XTC_TLR_OFFSET) - -/****************************************************************************/ -/** -* -* Enable a timer counter such that it starts running. -* -* @param BaseAddress is the base address of the device. -* @param TmrCtrNumber is the specific timer counter within the device, a -* zero based number, 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return None. -* -* @note C-Style signature: -* void XTmrCtr_Enable(u32 BaseAddress, u8 TmrCtrNumber); -*****************************************************************************/ -#define XTmrCtr_Enable(BaseAddress, TmrCtrNumber) \ - XTmrCtr_WriteReg((BaseAddress), (TmrCtrNumber), XTC_TCSR_OFFSET, \ - (XTmrCtr_ReadReg((BaseAddress), ( TmrCtrNumber), \ - XTC_TCSR_OFFSET) | XTC_CSR_ENABLE_TMR_MASK)) - -/****************************************************************************/ -/** -* -* Disable a timer counter such that it stops running. -* -* @param BaseAddress is the base address of the device. -* @param TmrCtrNumber is the specific timer counter within the device, -* a zero based number, 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return None. -* -* @note C-Style signature: -* void XTmrCtr_Disable(u32 BaseAddress, u8 TmrCtrNumber); -*****************************************************************************/ -#define XTmrCtr_Disable(BaseAddress, TmrCtrNumber) \ - XTmrCtr_WriteReg((BaseAddress), (TmrCtrNumber), XTC_TCSR_OFFSET, \ - (XTmrCtr_ReadReg((BaseAddress), (TmrCtrNumber),\ - XTC_TCSR_OFFSET) & ~ XTC_CSR_ENABLE_TMR_MASK)) - -/****************************************************************************/ -/** -* -* Enable the interrupt for a timer counter. -* -* @param BaseAddress is the base address of the device. -* @param TmrCtrNumber is the specific timer counter within the device, a -* zero based number, 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return None. -* -* @note C-Style signature: -* void XTmrCtr_EnableIntr(u32 BaseAddress, u8 TmrCtrNumber); -*****************************************************************************/ -#define XTmrCtr_EnableIntr(BaseAddress, TmrCtrNumber) \ - XTmrCtr_WriteReg((BaseAddress), (TmrCtrNumber), XTC_TCSR_OFFSET, \ - (XTmrCtr_ReadReg((BaseAddress), (TmrCtrNumber), \ - XTC_TCSR_OFFSET) | XTC_CSR_ENABLE_INT_MASK)) - -/****************************************************************************/ -/** -* -* Disable the interrupt for a timer counter. -* -* @param BaseAddress is the base address of the device. -* @param TmrCtrNumber is the specific timer counter within the device, a -* zero based number, 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return None. -* -* @note C-Style signature: -* void XTmrCtr_DisableIntr(u32 BaseAddress, u8 TmrCtrNumber); -*****************************************************************************/ -#define XTmrCtr_DisableIntr(BaseAddress, TmrCtrNumber) \ - XTmrCtr_WriteReg((BaseAddress), (TmrCtrNumber), XTC_TCSR_OFFSET, \ - (XTmrCtr_ReadReg((BaseAddress), (TmrCtrNumber), \ - XTC_TCSR_OFFSET) & ~ XTC_CSR_ENABLE_INT_MASK)) - -/****************************************************************************/ -/** -* -* Cause the timer counter to load it's Timer Counter Register with the value -* in the Load Register. -* -* @param BaseAddress is the base address of the device. -* @param TmrCtrNumber is the specific timer counter within the device, a -* zero based number, 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return None. -* -* @note C-Style signature: -* void XTmrCtr_LoadTimerCounterReg(u32 BaseAddress, - u8 TmrCtrNumber); -*****************************************************************************/ -#define XTmrCtr_LoadTimerCounterReg(BaseAddress, TmrCtrNumber) \ - XTmrCtr_WriteReg((BaseAddress), (TmrCtrNumber), XTC_TCSR_OFFSET, \ - (XTmrCtr_ReadReg((BaseAddress), (TmrCtrNumber),\ - XTC_TCSR_OFFSET) | XTC_CSR_LOAD_MASK)) - -/****************************************************************************/ -/** -* -* Determine if a timer counter event has occurred. Events are defined to be -* when a capture has occurred or the counter has roller over. -* -* @param BaseAddress is the base address of the device. -* @param TmrCtrNumber is the specific timer counter within the device, a -* zero based number, 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @note C-Style signature: -* int XTmrCtr_HasEventOccurred(u32 BaseAddress, u8 TmrCtrNumber); -*****************************************************************************/ -#define XTmrCtr_HasEventOccurred(BaseAddress, TmrCtrNumber) \ - ((XTmrCtr_ReadReg((BaseAddress), (TmrCtrNumber), \ - XTC_TCSR_OFFSET) & XTC_CSR_INT_OCCURED_MASK) == \ - XTC_CSR_INT_OCCURED_MASK) - -/************************** Function Prototypes ******************************/ -/************************** Variable Definitions *****************************/ -#ifdef __cplusplus -} -#endif -#endif /* end of protection macro */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_options.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_options.c deleted file mode 100644 index cc20dd007..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_options.c +++ /dev/null @@ -1,214 +0,0 @@ -/****************************************************************************** -* -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xtmrctr_options.c -* -* Contains configuration options functions for the XTmrCtr component. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00b jhl  02/06/02 First release
-* 1.10b mta  03/21/07 Updated to new coding style
-* 2.00a ktn  10/30/09 Updated to use HAL API's. _m is removed from all the macro
-*		      definitions.
-* 2.04a sdm  07/12/11 Added support for the cascade mode operation.
-* 
-* -******************************************************************************/ - -/***************************** Include Files *********************************/ - -#include "xtmrctr.h" -#include "xtmrctr_i.h" - -/************************** Constant Definitions *****************************/ - - -/**************************** Type Definitions *******************************/ - - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - - -/************************** Variable Definitions *****************************/ - -/* - * The following data type maps an option to a register mask such that getting - * and setting the options may be table driven. - */ -typedef struct { - u32 Option; - u32 Mask; -} Mapping; - -/* - * Create the table which contains options which are to be processed to get/set - * the options. These options are table driven to allow easy maintenance and - * expansion of the options. - */ -static Mapping OptionsTable[] = { - {XTC_CASCADE_MODE_OPTION, XTC_CSR_CASC_MASK}, - {XTC_ENABLE_ALL_OPTION, XTC_CSR_ENABLE_ALL_MASK}, - {XTC_DOWN_COUNT_OPTION, XTC_CSR_DOWN_COUNT_MASK}, - {XTC_CAPTURE_MODE_OPTION, XTC_CSR_CAPTURE_MODE_MASK | - XTC_CSR_EXT_CAPTURE_MASK}, - {XTC_INT_MODE_OPTION, XTC_CSR_ENABLE_INT_MASK}, - {XTC_AUTO_RELOAD_OPTION, XTC_CSR_AUTO_RELOAD_MASK}, - {XTC_EXT_COMPARE_OPTION, XTC_CSR_EXT_GENERATE_MASK} -}; - -/* Create a constant for the number of entries in the table */ - -#define XTC_NUM_OPTIONS (sizeof(OptionsTable) / sizeof(Mapping)) - -/*****************************************************************************/ -/** -* -* Enables the specified options for the specified timer counter. This function -* sets the options without regard to the current options of the driver. To -* prevent a loss of the current options, the user should call -* XTmrCtr_GetOptions() prior to this function and modify the retrieved options -* to pass into this function to prevent loss of the current options. -* -* @param InstancePtr is a pointer to the XTmrCtr instance. -* @param TmrCtrNumber is the timer counter of the device to operate on. -* Each device may contain multiple timer counters. The timer -* number is a zero based number with a range of -* 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* @param Options contains the desired options to be set or cleared. -* Setting the option to '1' enables the option, clearing the to -* '0' disables the option. The options are bit masks such that -* multiple options may be set or cleared. The options are -* described in xtmrctr.h. -* -* @return None. -* -* @note None. -* -******************************************************************************/ -void XTmrCtr_SetOptions(XTmrCtr * InstancePtr, u8 TmrCtrNumber, u32 Options) -{ - u32 CounterControlReg = 0; - u32 Index; - - Xil_AssertVoid(InstancePtr != NULL); - Xil_AssertVoid(TmrCtrNumber < XTC_DEVICE_TIMER_COUNT); - Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - /* - * Loop through the Options table, turning the enable on or off - * depending on whether the bit is set in the incoming Options flag. - */ - - for (Index = 0; Index < XTC_NUM_OPTIONS; Index++) { - if (Options & OptionsTable[Index].Option) { - - /* - * Turn the option on - */ - CounterControlReg |= OptionsTable[Index].Mask; - } - else { - /* - * Turn the option off - */ - CounterControlReg &= ~OptionsTable[Index].Mask; - } - } - - /* - * Write out the updated value to the actual register - */ - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TCSR_OFFSET, CounterControlReg); -} - -/*****************************************************************************/ -/** -* -* Get the options for the specified timer counter. -* -* @param InstancePtr is a pointer to the XTmrCtr instance. -* @param TmrCtrNumber is the timer counter of the device to operate on -* Each device may contain multiple timer counters. The timer -* number is a zero based number with a range of -* 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return -* -* The currently set options. An option which is set to a '1' is enabled and -* set to a '0' is disabled. The options are bit masks such that multiple -* options may be set or cleared. The options are described in xtmrctr.h. -* -* @note None. -* -******************************************************************************/ -u32 XTmrCtr_GetOptions(XTmrCtr * InstancePtr, u8 TmrCtrNumber) -{ - - u32 Options = 0; - u32 CounterControlReg; - u32 Index; - - Xil_AssertNonvoid(InstancePtr != NULL); - Xil_AssertNonvoid(TmrCtrNumber < XTC_DEVICE_TIMER_COUNT); - Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - /* - * Read the current contents of the control status register to allow - * the current options to be determined - */ - CounterControlReg = XTmrCtr_ReadReg(InstancePtr->BaseAddress, - TmrCtrNumber, XTC_TCSR_OFFSET); - /* - * Loop through the Options table, turning the enable on or off - * depending on whether the bit is set in the current register settings. - */ - for (Index = 0; Index < XTC_NUM_OPTIONS; Index++) { - if (CounterControlReg & OptionsTable[Index].Mask) { - Options |= OptionsTable[Index].Option; /* turn it on */ - } - else { - Options &= ~OptionsTable[Index].Option; /* turn it off */ - } - } - - return Options; -} diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_selftest.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_selftest.c deleted file mode 100644 index 4b2a6a861..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/tmrctr_v3_0/src/xtmrctr_selftest.c +++ /dev/null @@ -1,163 +0,0 @@ -/****************************************************************************** -* -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* Use of the Software is limited solely to applications: -* (a) running on a Xilinx device, or -* (b) that interact with a Xilinx device through a bus or interconnect. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Except as contained in this notice, the name of the Xilinx shall not be used -* in advertising or otherwise to promote the sale, use or other dealings in -* this Software without prior written authorization from Xilinx. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xtmrctr_selftest.c -* -* Contains diagnostic/self-test functions for the XTmrCtr component. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00b jhl  02/06/02 First release
-* 1.10b mta  03/21/07 Updated to new coding style
-* 2.00a ktn  10/30/09 Updated to use HAL API's. _m is removed from all the macro
-*		      definitions.
-* 
-* -******************************************************************************/ - -/***************************** Include Files *********************************/ - -#include "xil_io.h" -#include "xtmrctr.h" -#include "xtmrctr_i.h" - -/************************** Constant Definitions *****************************/ - - -/**************************** Type Definitions *******************************/ - - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - - -/************************** Variable Definitions *****************************/ - - -/*****************************************************************************/ -/** -* -* Runs a self-test on the driver/device. This test verifies that the specified -* timer counter of the device can be enabled and increments. -* -* @param InstancePtr is a pointer to the XTmrCtr instance. -* @param TmrCtrNumber is the timer counter of the device to operate on. -* Each device may contain multiple timer counters. The timer -* number is a zero based number with a range of -* 0 - (XTC_DEVICE_TIMER_COUNT - 1). -* -* @return -* - XST_SUCCESS if self-test was successful -* - XST_FAILURE if the timer is not incrementing. -* -* @note -* -* This is a destructive test using the provided timer. The current settings -* of the timer are returned to the initialized values and all settings at the -* time this function is called are overwritten. -* -******************************************************************************/ -int XTmrCtr_SelfTest(XTmrCtr * InstancePtr, u8 TmrCtrNumber) -{ - u32 TimerCount1 = 0; - u32 TimerCount2 = 0; - u16 Count = 0; - - Xil_AssertNonvoid(InstancePtr != NULL); - Xil_AssertNonvoid(TmrCtrNumber < XTC_DEVICE_TIMER_COUNT); - Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - - /* - * Set the Capture register to 0 - */ - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TLR_OFFSET, 0); - - /* - * Reset the timer and the interrupt - */ - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TCSR_OFFSET, - XTC_CSR_INT_OCCURED_MASK | XTC_CSR_LOAD_MASK); - - /* - * Set the control/status register to enable timer - */ - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TCSR_OFFSET, XTC_CSR_ENABLE_TMR_MASK); - - /* - * Read the timer - */ - TimerCount1 = XTmrCtr_ReadReg(InstancePtr->BaseAddress, - TmrCtrNumber, XTC_TCR_OFFSET); - /* - * Make sure timer is incrementing if the Count rolls over to zero - * and the timer still has not incremented an error is returned - */ - - do { - TimerCount2 = XTmrCtr_ReadReg(InstancePtr->BaseAddress, - TmrCtrNumber, XTC_TCR_OFFSET); - Count++; - } - while ((TimerCount1 == TimerCount2) && (Count != 0)); - - /* - * Reset the timer and the interrupt - */ - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TCSR_OFFSET, - XTC_CSR_INT_OCCURED_MASK | XTC_CSR_LOAD_MASK); - - /* - * Set the control/status register to 0 to complete initialization - * this disables the timer completely and allows it to be used again - */ - - XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber, - XTC_TCSR_OFFSET, 0); - - if (TimerCount1 == TimerCount2) { - return XST_FAILURE; - } - else { - return XST_SUCCESS; - } -} diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/Makefile b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/Makefile similarity index 100% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/Makefile rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/Makefile diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite.c similarity index 97% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite.c index da0e781c2..4be03cdbf 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -33,6 +33,8 @@ /** * * @file xuartlite.c +* @addtogroup uartlite_v3_1 +* @{ * * Contains required functions for the XUartLite driver. See the xuartlite.h * header file for more details on this driver. @@ -67,6 +69,12 @@ * 2.01a adk 18/04/13 Updated the code to avoid unused variable * warnings when compiling with the -Wextra -Wall flags * In the file xuartlite.c. CR:704999. +* 3.1 nsk 21/07/15 Updated XUartLite_ReceiveBuffer function to update the +* receive data into user buffer in critical region. +* CR#865787. +* 3.2 sk 11/10/15 Used UINTPTR instead of u32 for Baseaddress CR# 867425. +* Changed the prototype of XUartLite_CfgInitialize API. +* * * *****************************************************************************/ @@ -126,7 +134,7 @@ static void StubHandler(void *CallBackRef, unsigned int ByteCount); * *****************************************************************************/ int XUartLite_CfgInitialize(XUartLite *InstancePtr, XUartLite_Config *Config, - u32 EffectiveAddr) + UINTPTR EffectiveAddr) { (void) Config; /* @@ -574,8 +582,16 @@ unsigned int XUartLite_SendBuffer(XUartLite *InstancePtr) unsigned int XUartLite_ReceiveBuffer(XUartLite *InstancePtr) { u8 StatusRegister; + u8 StatusRegisterVal; unsigned int ReceivedCount = 0; + /* + * Enter a critical region by disabling all the UART interrupts to allow + * this call to stop a previous operation that may be interrupt driven + */ + StatusRegisterVal = XUartLite_GetStatusReg(InstancePtr->RegBaseAddress); + XUartLite_WriteReg(InstancePtr->RegBaseAddress, + XUL_CONTROL_REG_OFFSET, 0); /* * Loop until there is not more data buffered by the UART or the * specified number of bytes is received @@ -611,14 +627,6 @@ unsigned int XUartLite_ReceiveBuffer(XUartLite *InstancePtr) } } - /* - * Enter a critical region by disabling all the UART interrupts to allow - * this call to stop a previous operation that may be interrupt driven - */ - StatusRegister = XUartLite_GetStatusReg(InstancePtr->RegBaseAddress); - XUartLite_WriteReg(InstancePtr->RegBaseAddress, - XUL_CONTROL_REG_OFFSET, 0); - /* * Update the receive buffer to reflect the number of bytes that was * received @@ -635,12 +643,13 @@ unsigned int XUartLite_ReceiveBuffer(XUartLite *InstancePtr) * Restore the interrupt enable register to it's previous value such * that the critical region is exited */ - StatusRegister &= XUL_CR_ENABLE_INTR; + StatusRegisterVal &= XUL_CR_ENABLE_INTR; XUartLite_WriteReg(InstancePtr->RegBaseAddress, - XUL_CONTROL_REG_OFFSET, StatusRegister); + XUL_CONTROL_REG_OFFSET, StatusRegisterVal); return ReceivedCount; } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite.h similarity index 95% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite.h index bb382541a..dd18b9872 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -33,6 +33,9 @@ /** * * @file xuartlite.h +* @addtogroup uartlite_v3_1 +* @{ +* @details * * This component contains the implementation of the XUartLite component which is * the driver for the Xilinx UART Lite device. This UART is a minimal hardware @@ -131,6 +134,11 @@ * 3.0 adk 17/12/13 Fixed CR:741186,761863 Changes are made in the file * xuartlite_selftest.c * 3.0 adk 19/12/13 Update the driver as per new TCL API's +* 3.1 nsk 21/07/15 Updated XUartLite_ReceiveBuffer function in xuartlite.c +* to update the receive data into user buffer in critical +* region.CR#865787. +* 3.2 sk 11/10/15 Used UINTPTR instead of u32 for Baseaddress CR# 867425. +* Changed the prototype of XUartLite_CfgInitialize API. * * * @@ -191,7 +199,7 @@ typedef struct { */ typedef struct { u16 DeviceId; /**< Unique ID of device */ - u32 RegBaseAddr; /**< Register base address */ + UINTPTR RegBaseAddr; /**< Register base address */ u32 BaudRate; /**< Fixed baud rate */ u8 UseParity; /**< Parity generator enabled when TRUE */ u8 ParityOdd; /**< Parity generated is odd when TRUE, even @@ -206,7 +214,7 @@ typedef struct { */ typedef struct { XUartLite_Stats Stats; /* Component Statistics */ - u32 RegBaseAddress; /* Base address of registers */ + UINTPTR RegBaseAddress; /* Base address of registers */ u32 IsReady; /* Device is initialized and ready */ XUartLite_Buffer SendBuffer; @@ -235,7 +243,7 @@ XUartLite_Config *XUartLite_LookupConfig(u16 DeviceId); */ int XUartLite_CfgInitialize(XUartLite *InstancePtr, XUartLite_Config *Config, - u32 EffectiveAddr); + UINTPTR EffectiveAddr); void XUartLite_ResetFifos(XUartLite *InstancePtr); @@ -276,3 +284,4 @@ void XUartLite_InterruptHandler(XUartLite *InstancePtr); #endif /* end of protection macro */ +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_g.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_g.c similarity index 90% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_g.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_g.c index a282809b1..1edd414e3 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_g.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_g.c @@ -5,7 +5,7 @@ * Version: * DO NOT EDIT. * -* Copyright (C) 2010-2015 Xilinx, Inc. All Rights Reserved.* +* Copyright (C) 2010-2016 Xilinx, Inc. All Rights Reserved.* *Permission is hereby granted, free of charge, to any person obtaining a copy *of this software and associated documentation files (the Software), to deal *in the Software without restriction, including without limitation the rights @@ -22,8 +22,8 @@ * *THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -*XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +*XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, *WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT *OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_i.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_i.h similarity index 97% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_i.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_i.h index 8ae56bbe3..c28b830d0 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_i.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_i.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -33,6 +33,8 @@ /** * * @file xuartlite_i.h +* @addtogroup uartlite_v3_1 +* @{ * * Contains data which is shared between the files of the XUartLite component. * It is intended for internal use only. @@ -120,3 +122,4 @@ unsigned int XUartLite_ReceiveBuffer(XUartLite *InstancePtr); #endif /* end of protection macro */ +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_intr.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_intr.c similarity index 99% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_intr.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_intr.c index cd7c5da29..373ca5417 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_intr.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_intr.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -33,6 +33,8 @@ /** * * @file xuartlite_intr.c +* @addtogroup uartlite_v3_1 +* @{ * * This file contains interrupt-related functions for the UART Lite component * (XUartLite). @@ -330,3 +332,4 @@ void XUartLite_EnableInterrupt(XUartLite *InstancePtr) XUL_CONTROL_REG_OFFSET, XUL_CR_ENABLE_INTR); } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_l.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_l.c similarity index 90% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_l.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_l.c index eed69b774..bbb3922dc 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_l.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_l.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -33,6 +33,8 @@ /** * * @file xuartlite_l.c +* @addtogroup uartlite_v3_1 +* @{ * * This file contains low-level driver functions that can be used to access the * device. The user should refer to the hardware device specification for more @@ -46,6 +48,9 @@ * 1.00b rpm 04/25/02 First release * 1.12a rpm 07/16/07 Fixed arg type for RecvByte * 2.00a ktn 10/20/09 The macros have been renamed to remove _m from the name. +* 3.2 sk 11/10/15 Used UINTPTR instead of u32 for Baseaddress CR# 867425. +* Changed the prototypes of XUartLite_SendByte, +* XUartLite_RecvByte APIs. * * ******************************************************************************/ @@ -84,7 +89,7 @@ * @note None. * ******************************************************************************/ -void XUartLite_SendByte(u32 BaseAddress, u8 Data) +void XUartLite_SendByte(UINTPTR BaseAddress, u8 Data) { while (XUartLite_IsTransmitFull(BaseAddress)); @@ -106,10 +111,11 @@ void XUartLite_SendByte(u32 BaseAddress, u8 Data) * @note None. * ******************************************************************************/ -u8 XUartLite_RecvByte(u32 BaseAddress) +u8 XUartLite_RecvByte(UINTPTR BaseAddress) { while (XUartLite_IsReceiveEmpty(BaseAddress)); return (u8)XUartLite_ReadReg(BaseAddress, XUL_RX_FIFO_OFFSET); } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_l.h b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_l.h similarity index 96% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_l.h rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_l.h index 9c4b34c6e..6a5307c4b 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_l.h +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_l.h @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -33,6 +33,8 @@ /** * * @file xuartlite_l.h +* @addtogroup uartlite_v3_1 +* @{ * * This header file contains identifiers and low-level driver functions (or * macros) that can be used to access the device. High-level driver functions @@ -50,6 +52,9 @@ * 1.13a sv 01/21/08 Updated driver to support access through DCR bus * 2.00a ktn 10/20/09 Updated to use HAL Processor APIs. The macros have been * renamed to remove _m from the name. +* 3.2 sk 11/10/15 Used UINTPTR instead of u32 for Baseaddress CR# 867425. +* Changed the prototypes of XUartLite_SendByte, +* XUartLite_RecvByte APIs. * * *****************************************************************************/ @@ -318,8 +323,8 @@ extern "C" { /************************** Function Prototypes *****************************/ -void XUartLite_SendByte(u32 BaseAddress, u8 Data); -u8 XUartLite_RecvByte(u32 BaseAddress); +void XUartLite_SendByte(UINTPTR BaseAddress, u8 Data); +u8 XUartLite_RecvByte(UINTPTR BaseAddress); #ifdef __cplusplus } @@ -328,3 +333,4 @@ u8 XUartLite_RecvByte(u32 BaseAddress); #endif /* end of protection macro */ +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_selftest.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_selftest.c similarity index 97% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_selftest.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_selftest.c index 4c39a2d33..7a53fc78f 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_selftest.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_selftest.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -33,6 +33,8 @@ /** * * @file xuartlite_selftest.c +* @addtogroup uartlite_v3_1 +* @{ * * This file contains the self-test functions for the UART Lite component * (XUartLite). @@ -135,3 +137,4 @@ int XUartLite_SelfTest(XUartLite *InstancePtr) } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_sinit.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_sinit.c similarity index 97% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_sinit.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_sinit.c index 97611dada..39688a3fb 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_sinit.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_sinit.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2005 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2005 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -33,6 +33,8 @@ /** * * @file xuartlite_sinit.c +* @addtogroup uartlite_v3_1 +* @{ * * The implementation of the XUartLite component's static initialzation * functionality. @@ -143,3 +145,4 @@ int XUartLite_Initialize(XUartLite *InstancePtr, u16 DeviceId) ConfigPtr->RegBaseAddr); } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_stats.c b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_stats.c similarity index 97% rename from FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_stats.c rename to FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_stats.c index 305d37f9c..b3231832a 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_0/src/xuartlite_stats.c +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/microblaze_0/libsrc/uartlite_v3_2/src/xuartlite_stats.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002 - 2014 Xilinx, Inc. All rights reserved. +* Copyright (C) 2002 - 2015 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -33,6 +33,8 @@ /** * * @file xuartlite_stats.c +* @addtogroup uartlite_v3_1 +* @{ * * This file contains the statistics functions for the UART Lite component * (XUartLite). @@ -139,3 +141,4 @@ void XUartLite_ClearStats(XUartLite *InstancePtr) } +/** @} */ diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/system.mss b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/system.mss index b0bccf959..2304f57ad 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/system.mss +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/BSP/system.mss @@ -1,62 +1,51 @@ - PARAMETER NAME = C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\MicroBlaze_Kintex7_EthernetLite\BSP\system.mss - PARAMETER VERSION = 2.2.0 BEGIN OS PARAMETER OS_NAME = standalone - PARAMETER OS_VER = 4.2 + PARAMETER OS_VER = 5.4 PARAMETER PROC_INSTANCE = microblaze_0 + PARAMETER microblaze_exceptions = true + PARAMETER stdin = axi_uartlite_0 + PARAMETER stdout = axi_uartlite_0 END BEGIN PROCESSOR PARAMETER DRIVER_NAME = cpu - PARAMETER DRIVER_VER = 2.2 + PARAMETER DRIVER_VER = 2.4 PARAMETER HW_INSTANCE = microblaze_0 END BEGIN DRIVER PARAMETER DRIVER_NAME = emaclite - PARAMETER DRIVER_VER = 4.0 + PARAMETER DRIVER_VER = 4.2 PARAMETER HW_INSTANCE = axi_ethernetlite_0 END BEGIN DRIVER PARAMETER DRIVER_NAME = gpio - PARAMETER DRIVER_VER = 4.0 + PARAMETER DRIVER_VER = 4.1 PARAMETER HW_INSTANCE = axi_gpio_0 END -BEGIN DRIVER - PARAMETER DRIVER_NAME = intc - PARAMETER DRIVER_VER = 3.2 - PARAMETER HW_INSTANCE = axi_intc_0 -END - -BEGIN DRIVER - PARAMETER DRIVER_NAME = tmrctr - PARAMETER DRIVER_VER = 3.0 - PARAMETER HW_INSTANCE = axi_timer_0 -END - BEGIN DRIVER PARAMETER DRIVER_NAME = uartlite - PARAMETER DRIVER_VER = 3.0 + PARAMETER DRIVER_VER = 3.2 PARAMETER HW_INSTANCE = axi_uartlite_0 END BEGIN DRIVER PARAMETER DRIVER_NAME = bram - PARAMETER DRIVER_VER = 4.0 + PARAMETER DRIVER_VER = 4.1 PARAMETER HW_INSTANCE = microblaze_0_local_memory_dlmb_bram_if_cntlr END BEGIN DRIVER PARAMETER DRIVER_NAME = bram - PARAMETER DRIVER_VER = 4.0 + PARAMETER DRIVER_VER = 4.1 PARAMETER HW_INSTANCE = microblaze_0_local_memory_ilmb_bram_if_cntlr END diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/.project b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/.project index f860e24f1..ab1ca784d 100644 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/.project +++ b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/.project @@ -1,7 +1,7 @@ Hardware - Created by SDK v2014.4 + Created by SDK v2016.1 @@ -11,7 +11,7 @@ - 1421760060412 + 1462808401190 6 @@ -20,7 +20,7 @@ - 1421760060422 + 1462808401200 6 @@ -29,7 +29,7 @@ - 1421760060432 + 1462808401200 6 @@ -37,32 +37,5 @@ 1.0-name-matches-false-false-*.hwh - - 1421760060432 - - 6 - - org.eclipse.ui.ide.multiFilter - 1.0-name-matches-false-false-*.bit - - - - 1421760060442 - - 6 - - org.eclipse.ui.ide.multiFilter - 1.0-name-matches-false-false-*.bmm - - - - 1421760060442 - - 6 - - org.eclipse.ui.ide.multiFilter - 1.0-name-matches-false-false-*.mmi - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/base_microblaze_design.hwh b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/base_microblaze_design.hwh deleted file mode 100644 index bf43cd8a5..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/base_microblaze_design.hwh +++ /dev/null @@ -1,6575 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/base_microblaze_design_bd.tcl b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/base_microblaze_design_bd.tcl deleted file mode 100644 index ef538a029..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/base_microblaze_design_bd.tcl +++ /dev/null @@ -1,360 +0,0 @@ - -################################################################ -# This is a generated script based on design: base_microblaze_design -# -# Though there are limitations about the generated script, -# the main purpose of this utility is to make learning -# IP Integrator Tcl commands easier. -################################################################ - -################################################################ -# Check if script is running in correct Vivado version. -################################################################ -set scripts_vivado_version 2014.4 -set current_vivado_version [version -short] - -if { [string first $scripts_vivado_version $current_vivado_version] == -1 } { - puts "" - puts "ERROR: This script was generated using Vivado <$scripts_vivado_version> and is being run in <$current_vivado_version> of Vivado. Please run the script in Vivado <$scripts_vivado_version> then open the design in Vivado <$current_vivado_version>. Upgrade the design by running \"Tools => Report => Report IP Status...\", then run write_bd_tcl to create an updated script." - - return 1 -} - -################################################################ -# START -################################################################ - -# To test this script, run the following commands from Vivado Tcl console: -# source base_microblaze_design_script.tcl - -# If you do not already have a project created, -# you can create a project using the following command: -# create_project project_1 myproj -part xc7k325tffg900-2 -# set_property BOARD_PART xilinx.com:kc705:part0:1.1 [current_project] - - -# CHANGE DESIGN NAME HERE -set design_name base_microblaze_design - -# If you do not already have an existing IP Integrator design open, -# you can create a design using the following command: -# create_bd_design $design_name - -# CHECKING IF PROJECT EXISTS -if { [get_projects -quiet] eq "" } { - puts "ERROR: Please open or create a project!" - return 1 -} - - -# Creating design if needed -set errMsg "" -set nRet 0 - -set cur_design [current_bd_design -quiet] -set list_cells [get_bd_cells -quiet] - -if { ${design_name} eq "" } { - # USE CASES: - # 1) Design_name not set - - set errMsg "ERROR: Please set the variable to a non-empty value." - set nRet 1 - -} elseif { ${cur_design} ne "" && ${list_cells} eq "" } { - # USE CASES: - # 2): Current design opened AND is empty AND names same. - # 3): Current design opened AND is empty AND names diff; design_name NOT in project. - # 4): Current design opened AND is empty AND names diff; design_name exists in project. - - if { $cur_design ne $design_name } { - puts "INFO: Changing value of from <$design_name> to <$cur_design> since current design is empty." - set design_name [get_property NAME $cur_design] - } - puts "INFO: Constructing design in IPI design <$cur_design>..." - -} elseif { ${cur_design} ne "" && $list_cells ne "" && $cur_design eq $design_name } { - # USE CASES: - # 5) Current design opened AND has components AND same names. - - set errMsg "ERROR: Design <$design_name> already exists in your project, please set the variable to another value." - set nRet 1 -} elseif { [get_files -quiet ${design_name}.bd] ne "" } { - # USE CASES: - # 6) Current opened design, has components, but diff names, design_name exists in project. - # 7) No opened design, design_name exists in project. - - set errMsg "ERROR: Design <$design_name> already exists in your project, please set the variable to another value." - set nRet 2 - -} else { - # USE CASES: - # 8) No opened design, design_name not in project. - # 9) Current opened design, has components, but diff names, design_name not in project. - - puts "INFO: Currently there is no design <$design_name> in project, so creating one..." - - create_bd_design $design_name - - puts "INFO: Making design <$design_name> as current_bd_design." - current_bd_design $design_name - -} - -puts "INFO: Currently the variable is equal to \"$design_name\"." - -if { $nRet != 0 } { - puts $errMsg - return $nRet -} - -################################################################## -# DESIGN PROCs -################################################################## - - -# Hierarchical cell: microblaze_0_local_memory -proc create_hier_cell_microblaze_0_local_memory { parentCell nameHier } { - - if { $parentCell eq "" || $nameHier eq "" } { - puts "ERROR: create_hier_cell_microblaze_0_local_memory() - Empty argument(s)!" - return - } - - # Get object for parentCell - set parentObj [get_bd_cells $parentCell] - if { $parentObj == "" } { - puts "ERROR: Unable to find parent cell <$parentCell>!" - return - } - - # Make sure parentObj is hier blk - set parentType [get_property TYPE $parentObj] - if { $parentType ne "hier" } { - puts "ERROR: Parent <$parentObj> has TYPE = <$parentType>. Expected to be ." - return - } - - # Save current instance; Restore later - set oldCurInst [current_bd_instance .] - - # Set parent object as current - current_bd_instance $parentObj - - # Create cell and set as current instance - set hier_obj [create_bd_cell -type hier $nameHier] - current_bd_instance $hier_obj - - # Create interface pins - create_bd_intf_pin -mode MirroredMaster -vlnv xilinx.com:interface:lmb_rtl:1.0 DLMB - create_bd_intf_pin -mode MirroredMaster -vlnv xilinx.com:interface:lmb_rtl:1.0 ILMB - - # Create pins - create_bd_pin -dir I -type clk LMB_Clk - create_bd_pin -dir I -from 0 -to 0 -type rst LMB_Rst - - # Create instance: dlmb_bram_if_cntlr, and set properties - set dlmb_bram_if_cntlr [ create_bd_cell -type ip -vlnv xilinx.com:ip:lmb_bram_if_cntlr:4.0 dlmb_bram_if_cntlr ] - set_property -dict [ list CONFIG.C_ECC {0} ] $dlmb_bram_if_cntlr - - # Create instance: dlmb_v10, and set properties - set dlmb_v10 [ create_bd_cell -type ip -vlnv xilinx.com:ip:lmb_v10:3.0 dlmb_v10 ] - - # Create instance: ilmb_bram_if_cntlr, and set properties - set ilmb_bram_if_cntlr [ create_bd_cell -type ip -vlnv xilinx.com:ip:lmb_bram_if_cntlr:4.0 ilmb_bram_if_cntlr ] - set_property -dict [ list CONFIG.C_ECC {0} ] $ilmb_bram_if_cntlr - - # Create instance: ilmb_v10, and set properties - set ilmb_v10 [ create_bd_cell -type ip -vlnv xilinx.com:ip:lmb_v10:3.0 ilmb_v10 ] - - # Create instance: lmb_bram, and set properties - set lmb_bram [ create_bd_cell -type ip -vlnv xilinx.com:ip:blk_mem_gen:8.2 lmb_bram ] - set_property -dict [ list CONFIG.Memory_Type {True_Dual_Port_RAM} CONFIG.use_bram_block {BRAM_Controller} ] $lmb_bram - - # Create interface connections - connect_bd_intf_net -intf_net microblaze_0_dlmb [get_bd_intf_pins DLMB] [get_bd_intf_pins dlmb_v10/LMB_M] - connect_bd_intf_net -intf_net microblaze_0_dlmb_bus [get_bd_intf_pins dlmb_bram_if_cntlr/SLMB] [get_bd_intf_pins dlmb_v10/LMB_Sl_0] - connect_bd_intf_net -intf_net microblaze_0_dlmb_cntlr [get_bd_intf_pins dlmb_bram_if_cntlr/BRAM_PORT] [get_bd_intf_pins lmb_bram/BRAM_PORTA] - connect_bd_intf_net -intf_net microblaze_0_ilmb [get_bd_intf_pins ILMB] [get_bd_intf_pins ilmb_v10/LMB_M] - connect_bd_intf_net -intf_net microblaze_0_ilmb_bus [get_bd_intf_pins ilmb_bram_if_cntlr/SLMB] [get_bd_intf_pins ilmb_v10/LMB_Sl_0] - connect_bd_intf_net -intf_net microblaze_0_ilmb_cntlr [get_bd_intf_pins ilmb_bram_if_cntlr/BRAM_PORT] [get_bd_intf_pins lmb_bram/BRAM_PORTB] - - # Create port connections - connect_bd_net -net microblaze_0_Clk [get_bd_pins LMB_Clk] [get_bd_pins dlmb_bram_if_cntlr/LMB_Clk] [get_bd_pins dlmb_v10/LMB_Clk] [get_bd_pins ilmb_bram_if_cntlr/LMB_Clk] [get_bd_pins ilmb_v10/LMB_Clk] - connect_bd_net -net microblaze_0_LMB_Rst [get_bd_pins LMB_Rst] [get_bd_pins dlmb_bram_if_cntlr/LMB_Rst] [get_bd_pins dlmb_v10/SYS_Rst] [get_bd_pins ilmb_bram_if_cntlr/LMB_Rst] [get_bd_pins ilmb_v10/SYS_Rst] - - # Restore current instance - current_bd_instance $oldCurInst -} - - -# Procedure to create entire design; Provide argument to make -# procedure reusable. If parentCell is "", will use root. -proc create_root_design { parentCell } { - - if { $parentCell eq "" } { - set parentCell [get_bd_cells /] - } - - # Get object for parentCell - set parentObj [get_bd_cells $parentCell] - if { $parentObj == "" } { - puts "ERROR: Unable to find parent cell <$parentCell>!" - return - } - - # Make sure parentObj is hier blk - set parentType [get_property TYPE $parentObj] - if { $parentType ne "hier" } { - puts "ERROR: Parent <$parentObj> has TYPE = <$parentType>. Expected to be ." - return - } - - # Save current instance; Restore later - set oldCurInst [current_bd_instance .] - - # Set parent object as current - current_bd_instance $parentObj - - - # Create interface ports - set ddr3_sdram [ create_bd_intf_port -mode Master -vlnv xilinx.com:interface:ddrx_rtl:1.0 ddr3_sdram ] - set led_8bits [ create_bd_intf_port -mode Master -vlnv xilinx.com:interface:gpio_rtl:1.0 led_8bits ] - set mdio_mdc [ create_bd_intf_port -mode Master -vlnv xilinx.com:interface:mdio_rtl:1.0 mdio_mdc ] - set mii [ create_bd_intf_port -mode Master -vlnv xilinx.com:interface:mii_rtl:1.0 mii ] - set rs232_uart [ create_bd_intf_port -mode Master -vlnv xilinx.com:interface:uart_rtl:1.0 rs232_uart ] - set sys_diff_clock [ create_bd_intf_port -mode Slave -vlnv xilinx.com:interface:diff_clock_rtl:1.0 sys_diff_clock ] - - # Create ports - set reset [ create_bd_port -dir I -type rst reset ] - set_property -dict [ list CONFIG.POLARITY {ACTIVE_HIGH} ] $reset - - # Create instance: axi_ethernetlite_0, and set properties - set axi_ethernetlite_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_ethernetlite:3.0 axi_ethernetlite_0 ] - set_property -dict [ list CONFIG.MDIO_BOARD_INTERFACE {mdio_mdc} CONFIG.MII_BOARD_INTERFACE {mii} CONFIG.USE_BOARD_FLOW {true} ] $axi_ethernetlite_0 - - # Create instance: axi_gpio_0, and set properties - set axi_gpio_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_gpio:2.0 axi_gpio_0 ] - set_property -dict [ list CONFIG.GPIO_BOARD_INTERFACE {led_8bits} CONFIG.USE_BOARD_FLOW {true} ] $axi_gpio_0 - - # Create instance: axi_intc_0, and set properties - set axi_intc_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_intc:4.1 axi_intc_0 ] - - # Create instance: axi_mem_intercon, and set properties - set axi_mem_intercon [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_interconnect:2.1 axi_mem_intercon ] - set_property -dict [ list CONFIG.NUM_MI {1} CONFIG.NUM_SI {2} ] $axi_mem_intercon - - # Create instance: axi_timer_0, and set properties - set axi_timer_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_timer:2.0 axi_timer_0 ] - - # Create instance: axi_uartlite_0, and set properties - set axi_uartlite_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_uartlite:2.0 axi_uartlite_0 ] - set_property -dict [ list CONFIG.C_BAUDRATE {115200} CONFIG.UARTLITE_BOARD_INTERFACE {rs232_uart} CONFIG.USE_BOARD_FLOW {true} ] $axi_uartlite_0 - - # Create instance: mdm_1, and set properties - set mdm_1 [ create_bd_cell -type ip -vlnv xilinx.com:ip:mdm:3.2 mdm_1 ] - - # Create instance: microblaze_0, and set properties - set microblaze_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:microblaze:9.4 microblaze_0 ] - set_property -dict [ list CONFIG.C_CACHE_BYTE_SIZE {32768} \ -CONFIG.C_DCACHE_BYTE_SIZE {32768} CONFIG.C_DCACHE_LINE_LEN {8} \ -CONFIG.C_DCACHE_USE_WRITEBACK {1} CONFIG.C_DCACHE_VICTIMS {8} \ -CONFIG.C_DEBUG_ENABLED {1} CONFIG.C_DIV_ZERO_EXCEPTION {1} \ -CONFIG.C_D_AXI {1} CONFIG.C_D_LMB {1} \ -CONFIG.C_FPU_EXCEPTION {1} CONFIG.C_ICACHE_LINE_LEN {8} \ -CONFIG.C_ICACHE_STREAMS {1} CONFIG.C_ICACHE_VICTIMS {8} \ -CONFIG.C_ILL_OPCODE_EXCEPTION {1} CONFIG.C_I_LMB {1} \ -CONFIG.C_M_AXI_D_BUS_EXCEPTION {1} CONFIG.C_M_AXI_I_BUS_EXCEPTION {1} \ -CONFIG.C_NUMBER_OF_PC_BRK {8} CONFIG.C_NUMBER_OF_RD_ADDR_BRK {2} \ -CONFIG.C_NUMBER_OF_WR_ADDR_BRK {2} CONFIG.C_OPCODE_0x0_ILLEGAL {1} \ -CONFIG.C_TRACE {1} CONFIG.C_UNALIGNED_EXCEPTIONS {1} \ -CONFIG.C_USE_BARREL {1} CONFIG.C_USE_BRANCH_TARGET_CACHE {1} \ -CONFIG.C_USE_DCACHE {1} CONFIG.C_USE_DIV {1} \ -CONFIG.C_USE_FPU {2} CONFIG.C_USE_HW_MUL {2} \ -CONFIG.C_USE_ICACHE {1} CONFIG.C_USE_MSR_INSTR {1} \ -CONFIG.C_USE_PCMP_INSTR {1} CONFIG.C_USE_REORDER_INSTR {1} \ -CONFIG.C_USE_STACK_PROTECTION {1} CONFIG.G_TEMPLATE_LIST {2} \ -CONFIG.G_USE_EXCEPTIONS {1} ] $microblaze_0 - - # Create instance: microblaze_0_axi_periph, and set properties - set microblaze_0_axi_periph [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_interconnect:2.1 microblaze_0_axi_periph ] - set_property -dict [ list CONFIG.NUM_MI {5} CONFIG.NUM_SI {1} ] $microblaze_0_axi_periph - - # Create instance: microblaze_0_local_memory - create_hier_cell_microblaze_0_local_memory [current_bd_instance .] microblaze_0_local_memory - - # Create instance: mig_7series_0, and set properties - set mig_7series_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:mig_7series:2.3 mig_7series_0 ] - set_property -dict [ list CONFIG.BOARD_MIG_PARAM {ddr3_sdram} CONFIG.RESET_BOARD_INTERFACE {reset} ] $mig_7series_0 - - # Create instance: rst_clk_wiz_1_100M, and set properties - set rst_clk_wiz_1_100M [ create_bd_cell -type ip -vlnv xilinx.com:ip:proc_sys_reset:5.0 rst_clk_wiz_1_100M ] - set_property -dict [ list CONFIG.RESET_BOARD_INTERFACE {Custom} CONFIG.USE_BOARD_FLOW {true} ] $rst_clk_wiz_1_100M - - # Create instance: xlconcat_0, and set properties - set xlconcat_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:xlconcat:2.1 xlconcat_0 ] - set_property -dict [ list CONFIG.NUM_PORTS {3} ] $xlconcat_0 - - # Create interface connections - connect_bd_intf_net -intf_net SYS_CLK_1 [get_bd_intf_ports sys_diff_clock] [get_bd_intf_pins mig_7series_0/SYS_CLK] - connect_bd_intf_net -intf_net axi_ethernetlite_0_MDIO [get_bd_intf_ports mdio_mdc] [get_bd_intf_pins axi_ethernetlite_0/MDIO] - connect_bd_intf_net -intf_net axi_ethernetlite_0_MII [get_bd_intf_ports mii] [get_bd_intf_pins axi_ethernetlite_0/MII] - connect_bd_intf_net -intf_net axi_gpio_0_GPIO [get_bd_intf_ports led_8bits] [get_bd_intf_pins axi_gpio_0/GPIO] - connect_bd_intf_net -intf_net axi_intc_0_interrupt [get_bd_intf_pins axi_intc_0/interrupt] [get_bd_intf_pins microblaze_0/INTERRUPT] - connect_bd_intf_net -intf_net axi_mem_intercon_M00_AXI [get_bd_intf_pins axi_mem_intercon/M00_AXI] [get_bd_intf_pins mig_7series_0/S_AXI] - connect_bd_intf_net -intf_net axi_uartlite_0_UART [get_bd_intf_ports rs232_uart] [get_bd_intf_pins axi_uartlite_0/UART] - connect_bd_intf_net -intf_net microblaze_0_M_AXI_DC [get_bd_intf_pins axi_mem_intercon/S00_AXI] [get_bd_intf_pins microblaze_0/M_AXI_DC] - connect_bd_intf_net -intf_net microblaze_0_M_AXI_DP [get_bd_intf_pins microblaze_0/M_AXI_DP] [get_bd_intf_pins microblaze_0_axi_periph/S00_AXI] - connect_bd_intf_net -intf_net microblaze_0_M_AXI_IC [get_bd_intf_pins axi_mem_intercon/S01_AXI] [get_bd_intf_pins microblaze_0/M_AXI_IC] - connect_bd_intf_net -intf_net microblaze_0_axi_periph_M00_AXI [get_bd_intf_pins axi_uartlite_0/S_AXI] [get_bd_intf_pins microblaze_0_axi_periph/M00_AXI] - connect_bd_intf_net -intf_net microblaze_0_axi_periph_M01_AXI [get_bd_intf_pins axi_gpio_0/S_AXI] [get_bd_intf_pins microblaze_0_axi_periph/M01_AXI] - connect_bd_intf_net -intf_net microblaze_0_axi_periph_M02_AXI [get_bd_intf_pins axi_timer_0/S_AXI] [get_bd_intf_pins microblaze_0_axi_periph/M02_AXI] - connect_bd_intf_net -intf_net microblaze_0_axi_periph_M03_AXI [get_bd_intf_pins axi_intc_0/s_axi] [get_bd_intf_pins microblaze_0_axi_periph/M03_AXI] - connect_bd_intf_net -intf_net microblaze_0_axi_periph_M04_AXI [get_bd_intf_pins axi_ethernetlite_0/S_AXI] [get_bd_intf_pins microblaze_0_axi_periph/M04_AXI] - connect_bd_intf_net -intf_net microblaze_0_debug [get_bd_intf_pins mdm_1/MBDEBUG_0] [get_bd_intf_pins microblaze_0/DEBUG] - connect_bd_intf_net -intf_net microblaze_0_dlmb_1 [get_bd_intf_pins microblaze_0/DLMB] [get_bd_intf_pins microblaze_0_local_memory/DLMB] - connect_bd_intf_net -intf_net microblaze_0_ilmb_1 [get_bd_intf_pins microblaze_0/ILMB] [get_bd_intf_pins microblaze_0_local_memory/ILMB] - connect_bd_intf_net -intf_net mig_7series_0_DDR3 [get_bd_intf_ports ddr3_sdram] [get_bd_intf_pins mig_7series_0/DDR3] - - # Create port connections - connect_bd_net -net axi_ethernetlite_0_ip2intc_irpt [get_bd_pins axi_ethernetlite_0/ip2intc_irpt] [get_bd_pins xlconcat_0/In2] - connect_bd_net -net axi_timer_0_interrupt [get_bd_pins axi_timer_0/interrupt] [get_bd_pins xlconcat_0/In0] - connect_bd_net -net axi_uartlite_0_interrupt [get_bd_pins axi_uartlite_0/interrupt] [get_bd_pins xlconcat_0/In1] - connect_bd_net -net mdm_1_debug_sys_rst [get_bd_pins mdm_1/Debug_SYS_Rst] [get_bd_pins rst_clk_wiz_1_100M/mb_debug_sys_rst] - connect_bd_net -net microblaze_0_Clk [get_bd_pins axi_ethernetlite_0/s_axi_aclk] [get_bd_pins axi_gpio_0/s_axi_aclk] [get_bd_pins axi_intc_0/s_axi_aclk] [get_bd_pins axi_mem_intercon/ACLK] [get_bd_pins axi_mem_intercon/M00_ACLK] [get_bd_pins axi_mem_intercon/S00_ACLK] [get_bd_pins axi_mem_intercon/S01_ACLK] [get_bd_pins axi_timer_0/s_axi_aclk] [get_bd_pins axi_uartlite_0/s_axi_aclk] [get_bd_pins microblaze_0/Clk] [get_bd_pins microblaze_0_axi_periph/ACLK] [get_bd_pins microblaze_0_axi_periph/M00_ACLK] [get_bd_pins microblaze_0_axi_periph/M01_ACLK] [get_bd_pins microblaze_0_axi_periph/M02_ACLK] [get_bd_pins microblaze_0_axi_periph/M03_ACLK] [get_bd_pins microblaze_0_axi_periph/M04_ACLK] [get_bd_pins microblaze_0_axi_periph/S00_ACLK] [get_bd_pins microblaze_0_local_memory/LMB_Clk] [get_bd_pins mig_7series_0/ui_clk] [get_bd_pins rst_clk_wiz_1_100M/slowest_sync_clk] - connect_bd_net -net mig_7series_0_mmcm_locked [get_bd_pins mig_7series_0/mmcm_locked] [get_bd_pins rst_clk_wiz_1_100M/dcm_locked] - connect_bd_net -net mig_7series_0_ui_clk_sync_rst [get_bd_pins mig_7series_0/ui_clk_sync_rst] [get_bd_pins rst_clk_wiz_1_100M/ext_reset_in] - connect_bd_net -net reset_1 [get_bd_ports reset] [get_bd_pins mig_7series_0/sys_rst] - connect_bd_net -net rst_clk_wiz_1_100M_bus_struct_reset [get_bd_pins microblaze_0_local_memory/LMB_Rst] [get_bd_pins rst_clk_wiz_1_100M/bus_struct_reset] - connect_bd_net -net rst_clk_wiz_1_100M_interconnect_aresetn [get_bd_pins axi_mem_intercon/ARESETN] [get_bd_pins microblaze_0_axi_periph/ARESETN] [get_bd_pins rst_clk_wiz_1_100M/interconnect_aresetn] - connect_bd_net -net rst_clk_wiz_1_100M_mb_reset [get_bd_pins microblaze_0/Reset] [get_bd_pins rst_clk_wiz_1_100M/mb_reset] - connect_bd_net -net rst_clk_wiz_1_100M_peripheral_aresetn [get_bd_pins axi_ethernetlite_0/s_axi_aresetn] [get_bd_pins axi_gpio_0/s_axi_aresetn] [get_bd_pins axi_intc_0/s_axi_aresetn] [get_bd_pins axi_mem_intercon/M00_ARESETN] [get_bd_pins axi_mem_intercon/S00_ARESETN] [get_bd_pins axi_mem_intercon/S01_ARESETN] [get_bd_pins axi_timer_0/s_axi_aresetn] [get_bd_pins axi_uartlite_0/s_axi_aresetn] [get_bd_pins microblaze_0_axi_periph/M00_ARESETN] [get_bd_pins microblaze_0_axi_periph/M01_ARESETN] [get_bd_pins microblaze_0_axi_periph/M02_ARESETN] [get_bd_pins microblaze_0_axi_periph/M03_ARESETN] [get_bd_pins microblaze_0_axi_periph/M04_ARESETN] [get_bd_pins microblaze_0_axi_periph/S00_ARESETN] [get_bd_pins mig_7series_0/aresetn] [get_bd_pins rst_clk_wiz_1_100M/peripheral_aresetn] - connect_bd_net -net xlconcat_0_dout [get_bd_pins axi_intc_0/intr] [get_bd_pins xlconcat_0/dout] - - # Create address segments - create_bd_addr_seg -range 0x10000 -offset 0x40E00000 [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs axi_ethernetlite_0/S_AXI/Reg] SEG_axi_ethernetlite_0_Reg - create_bd_addr_seg -range 0x10000 -offset 0x40000000 [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs axi_gpio_0/S_AXI/Reg] SEG_axi_gpio_0_Reg - create_bd_addr_seg -range 0x10000 -offset 0x41200000 [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs axi_intc_0/s_axi/Reg] SEG_axi_intc_0_Reg - create_bd_addr_seg -range 0x10000 -offset 0x41C00000 [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs axi_timer_0/S_AXI/Reg] SEG_axi_timer_0_Reg - create_bd_addr_seg -range 0x10000 -offset 0x40600000 [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs axi_uartlite_0/S_AXI/Reg] SEG_axi_uartlite_0_Reg - create_bd_addr_seg -range 0x40000 -offset 0x0 [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs microblaze_0_local_memory/dlmb_bram_if_cntlr/SLMB/Mem] SEG_dlmb_bram_if_cntlr_Mem - create_bd_addr_seg -range 0x40000 -offset 0x0 [get_bd_addr_spaces microblaze_0/Instruction] [get_bd_addr_segs microblaze_0_local_memory/ilmb_bram_if_cntlr/SLMB/Mem] SEG_ilmb_bram_if_cntlr_Mem - create_bd_addr_seg -range 0x40000000 -offset 0x80000000 [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs mig_7series_0/memmap/memaddr] SEG_mig_7series_0_memaddr - create_bd_addr_seg -range 0x40000000 -offset 0x80000000 [get_bd_addr_spaces microblaze_0/Instruction] [get_bd_addr_segs mig_7series_0/memmap/memaddr] SEG_mig_7series_0_memaddr - - - # Restore current instance - current_bd_instance $oldCurInst - - save_bd_design -} -# End of create_root_design() - - -################################################################## -# MAIN FLOW -################################################################## - -create_root_design "" - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/base_microblaze_design_wrapper.mmi b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/base_microblaze_design_wrapper.mmi deleted file mode 100644 index 40c93ef57..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/base_microblaze_design_wrapper.mmi +++ /dev/null @@ -1,334 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/sysdef.xml b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/sysdef.xml deleted file mode 100644 index 6e97db55c..000000000 --- a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/sysdef.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/system.hdf b/FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/Hardware/system.hdf index d508b5e651ea625b70ac31a3d4a03bb67d15e7b2..f0e38f475d12fe31f8444bcd203b294ab523a7e8 100644 GIT binary patch literal 66345 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 literal 789176 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�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ΞPs-Y3$f$nFj64_M>=GAj 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

hx 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�L}ph$vfgVy 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

PqEeCzFLj+)ft0CRdOODJ7~M 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