From 03b78a078e2626aec30aa7fe15e2bcb590ebb78d Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Sat, 19 Sep 2020 23:43:50 +0200 Subject: [PATCH] Removed software component --- software/.metadata/.lock | 0 .../com.xilinx.sdk.hw/dialog_settings.xml | 4 - .../LED_Controller.1599952462007.pdom | Bin 208896 -> 0 bytes .../LED_Controller_bsp.1599952462009.pdom | Bin 737280 -> 0 bytes .../LED_Controller.sc | 793 --- .../org.eclipse.cdt.make.core/specs.c | 1 - .../org.eclipse.cdt.make.core/specs.cpp | 1 - .../dialog_settings.xml | 3 - .../org.eclipse.cdt.ui/dialog_settings.xml | 8 - .../15/20a916bbf2f8001a1591e56b2da69a2d | 208 - .../16/307548faf5f8001a1591e56b2da69a2d | 212 - .../1e/506725ceebf9001a1594f754340f23a0 | 252 - .../2d/006e0b7af3f9001a1594f754340f23a0 | 264 - .../2e/f0ada384f3f9001a1594f754340f23a0 | 266 - .../2f/e07ac67ce9f9001a1594f754340f23a0 | 247 - .../32/904df402eaf9001a1594f754340f23a0 | 252 - .../40/b0e30a03f6f8001a1591e56b2da69a2d | 213 - .../42/9026d6c2f2f8001a1591e56b2da69a2d | 208 - .../47/d023e48af3f8001a1591e56b2da69a2d | 208 - .../48/40f584f1f5f8001a1591e56b2da69a2d | 210 - .../4d/407df999cbf6001a1baecb89e4fed027 | 202 - .../5/d0d0d38bcbf6001a1baecb89e4fed027 | 199 - .../52/70186df9c8f6001a1baecb89e4fed027 | 204 - .../55/a06a718beef9001a1594f754340f23a0 | 256 - .../59/d08dccc1faf9001a1594f754340f23a0 | 268 - .../59/f0ade47cfcf8001a1591e56b2da69a2d | 230 - .../62/109d196ee9f9001a1594f754340f23a0 | 232 - .../64/500397c5faf9001a1594f754340f23a0 | 268 - .../65/d071f129c9f6001a1baecb89e4fed027 | 204 - .../6b/40bd6ed0faf9001a1594f754340f23a0 | 268 - .../6c/d095fb4acaf6001a1baecb89e4fed027 | 204 - .../7b/304a29e3f1f9001a1594f754340f23a0 | 260 - .../8/4025aea1cbf6001a1baecb89e4fed027 | 204 - .../81/403f3f97cbf6001a1baecb89e4fed027 | 202 - .../83/305bbca1eef9001a1594f754340f23a0 | 258 - .../8a/1060b65e03f9001a1591e56b2da69a2d | 231 - .../8b/b03c3ee1e9f9001a1594f754340f23a0 | 248 - .../9f/30387ff6f5f8001a1591e56b2da69a2d | 211 - .../a/30342cfdf5f8001a1591e56b2da69a2d | 213 - .../a8/309ae6a801f9001a1591e56b2da69a2d | 230 - .../b0/40ccb57bcaf6001a1baecb89e4fed027 | 198 - .../b5/d0dff3fbc7f6001a1baecb89e4fed027 | 204 - .../b7/d09455cfe9f9001a1594f754340f23a0 | 246 - .../b9/203e4dede9f9001a1594f754340f23a0 | 252 - .../bb/e0bf3d9bf6f8001a1591e56b2da69a2d | 212 - .../be/40cd6993cbf6001a1baecb89e4fed027 | 202 - .../bf/a0337580cbf6001a1baecb89e4fed027 | 198 - .../cd/305a6603f3f9001a1594f754340f23a0 | 264 - .../ce/4018d09f01f9001a1591e56b2da69a2d | 231 - .../d/60635348f2f8001a1591e56b2da69a2d | 205 - .../d3/20aec944f7f8001a1591e56b2da69a2d | 228 - .../d8/803d3aebf5f8001a1591e56b2da69a2d | 209 - .../de/902d4436ebf9001a1594f754340f23a0 | 252 - .../e9/20afbe7eeef9001a1594f754340f23a0 | 256 - .../f0/e0c805f3f5f8001a1591e56b2da69a2d | 212 - .../f2/80e7b08af3f9001a1594f754340f23a0 | 268 - .../f3/d0c67fe9f6f8001a1591e56b2da69a2d | 220 - .../f7/3077b75576f7001a116fc72c51299c73 | 205 - .../f9/e0bf90a2f6f8001a1591e56b2da69a2d | 220 - .../LED_Controller/.indexes/e4/history.index | Bin 1226 -> 0 bytes .../.indexes/e4/properties.index | Bin 135 -> 0 bytes .../LED_Controller/.indexes/properties.index | Bin 417 -> 0 bytes .../.projects/LED_Controller/.markers | Bin 243 -> 0 bytes .../.indexes/properties.index | Bin 230 -> 0 bytes .../micro_test/.indexes/properties.index | Bin 127 -> 0 bytes .../.root/.indexes/history.version | 1 - .../.root/.indexes/properties.index | Bin 104 -> 0 bytes .../.root/.indexes/properties.version | 1 - .../org.eclipse.core.resources/.root/12.tree | Bin 11246 -> 0 bytes .../.safetable/org.eclipse.core.resources | Bin 505 -> 0 bytes .../.settings/org.eclipse.cdt.core.prefs | 2 - ....eclipse.cdt.core.prj-LED_Controller.prefs | 3 - ...ipse.cdt.core.prj-LED_Controller_bsp.prefs | 3 - .../org.eclipse.cdt.debug.core.prefs | 2 - .../org.eclipse.cdt.managedbuilder.core.prefs | 5 - .../.settings/org.eclipse.cdt.ui.prefs | 4 - .../org.eclipse.core.resources.prefs | 2 - .../.settings/org.eclipse.debug.core.prefs | 5 - .../.settings/org.eclipse.debug.ui.prefs | 3 - .../.settings/org.eclipse.search.prefs | 2 - .../.settings/org.eclipse.ui.browser.prefs | 2 - .../.settings/org.eclipse.ui.editors.prefs | 2 - .../.settings/org.eclipse.ui.ide.prefs | 6 - .../.settings/org.eclipse.ui.prefs | 3 - .../.settings/org.eclipse.ui.workbench.prefs | 7 - .../.workspace/2020/9/37/refactorings.history | 4 - .../.workspace/2020/9/37/refactorings.index | 1 - .../dialog_settings.xml | 7 - .../org.eclipse.search/dialog_settings.xml | 6 - .../dialog_settings.xml | 5 - .../org.eclipse.ui.ide/dialog_settings.xml | 5 - .../dialog_settings.xml | 30 - .../dialog_settings.xml | 18 - .../org.eclipse.ui.workbench/workbench.xml | 430 -- .../org.eclipse.ui.workbench/workingsets.xml | 4 - software/.metadata/version.ini | 1 - software/LED_Controller/.cproject | 239 - software/LED_Controller/.project | 26 - .../LED_Controller/Release/LED_Controller.elf | Bin 51396 -> 0 bytes software/LED_Controller/Release/makefile | 65 - software/LED_Controller/Release/objects.mk | 8 - software/LED_Controller/Release/sources.mk | 21 - .../LED_Controller/Release/src/LEDBlinker.d | 25 - .../LED_Controller/Release/src/LEDBlinker.o | Bin 11584 -> 0 bytes software/LED_Controller/Release/src/subdir.mk | 27 - software/LED_Controller/src/LEDBlinker.c | 268 - software/LED_Controller/src/README.txt | 1 - software/LED_Controller/src/lscript.ld | 212 - software/LED_Controller_bsp/.cproject | 15 - software/LED_Controller_bsp/.project | 76 - software/LED_Controller_bsp/.sdkproject | 3 - software/LED_Controller_bsp/Makefile | 21 - software/LED_Controller_bsp/libgen.options | 3 - .../include/_profile_timer_hw.h | 292 - .../microblaze_mcs/include/bspconfig.h | 15 - .../microblaze_mcs/include/fsl.h | 49 - .../microblaze_mcs/include/mb_interface.h | 361 - .../microblaze_mcs/include/mblaze_nt_types.h | 51 - .../include/microblaze_exceptions_g.h | 14 - .../include/microblaze_exceptions_i.h | 73 - .../include/microblaze_interrupts_i.h | 61 - .../microblaze_mcs/include/profile.h | 127 - .../microblaze_mcs/include/pvr.h | 264 - .../microblaze_mcs/include/xbasic_types.h | 300 - .../microblaze_mcs/include/xbram.h | 218 - .../microblaze_mcs/include/xbram_hw.h | 415 -- .../microblaze_mcs/include/xdebug.h | 61 - .../microblaze_mcs/include/xenv.h | 177 - .../microblaze_mcs/include/xenv_none.h | 41 - .../microblaze_mcs/include/xenv_standalone.h | 356 - .../microblaze_mcs/include/xenv_vxworks.h | 258 - .../microblaze_mcs/include/xil_assert.h | 195 - .../microblaze_mcs/include/xil_cache.h | 456 -- .../include/xil_cache_vxworks.h | 103 - .../microblaze_mcs/include/xil_exception.h | 128 - .../microblaze_mcs/include/xil_hal.h | 71 - .../microblaze_mcs/include/xil_io.h | 366 -- .../microblaze_mcs/include/xil_macroback.h | 1069 --- .../include/xil_misc_psreset_api.h | 286 - .../microblaze_mcs/include/xil_printf.h | 55 - .../microblaze_mcs/include/xil_testcache.h | 71 - .../microblaze_mcs/include/xil_testio.h | 101 - .../microblaze_mcs/include/xil_testmem.h | 173 - .../microblaze_mcs/include/xil_types.h | 160 - .../microblaze_mcs/include/xio.h | 266 - .../microblaze_mcs/include/xiomodule.h | 581 -- .../microblaze_mcs/include/xiomodule_i.h | 129 - .../microblaze_mcs/include/xiomodule_io.h | 86 - .../microblaze_mcs/include/xiomodule_l.h | 446 -- .../microblaze_mcs/include/xparameters.h | 653 -- .../microblaze_mcs/include/xstatus.h | 418 -- .../microblaze_mcs/include/xutil.h | 154 - .../microblaze_mcs/include/xversion.h | 98 - .../microblaze_mcs/lib/libc.a | Bin 1056170 -> 0 bytes .../microblaze_mcs/lib/libm.a | Bin 569828 -> 0 bytes .../microblaze_mcs/lib/libxil.a | Bin 456086 -> 0 bytes .../libsrc/bram_v3_03_a/src/Makefile | 28 - .../libsrc/bram_v3_03_a/src/xbram.c | 153 - .../libsrc/bram_v3_03_a/src/xbram.h | 218 - .../libsrc/bram_v3_03_a/src/xbram_g.c | 64 - .../libsrc/bram_v3_03_a/src/xbram_hw.h | 415 -- .../libsrc/bram_v3_03_a/src/xbram_intr.c | 244 - .../libsrc/bram_v3_03_a/src/xbram_selftest.c | 564 -- .../libsrc/bram_v3_03_a/src/xbram_sinit.c | 110 - .../libsrc/common_v1_00_a/src/Makefile | 28 - .../libsrc/common_v1_00_a/src/xbasic_types.c | 137 - .../libsrc/common_v1_00_a/src/xbasic_types.h | 300 - .../libsrc/common_v1_00_a/src/xdebug.h | 61 - .../libsrc/common_v1_00_a/src/xenv.h | 177 - .../libsrc/common_v1_00_a/src/xenv_linux.h | 241 - .../libsrc/common_v1_00_a/src/xenv_none.h | 41 - .../common_v1_00_a/src/xenv_standalone.h | 356 - .../libsrc/common_v1_00_a/src/xenv_vxworks.h | 258 - .../libsrc/common_v1_00_a/src/xparameters.h | 738 --- .../libsrc/common_v1_00_a/src/xstatus.h | 418 -- .../libsrc/common_v1_00_a/src/xutil.h | 154 - .../libsrc/common_v1_00_a/src/xutil_memtest.c | 1173 ---- .../libsrc/common_v1_00_a/src/xversion.c | 344 - .../libsrc/common_v1_00_a/src/xversion.h | 98 - .../libsrc/cpu_v1_15_a/src/Makefile | 27 - .../libsrc/cpu_v1_15_a/src/fsl.h | 181 - .../libsrc/cpu_v1_15_a/src/xio.c | 236 - .../libsrc/cpu_v1_15_a/src/xio.h | 266 - .../libsrc/iomodule_v1_04_a/src/Makefile | 30 - .../libsrc/iomodule_v1_04_a/src/xiomodule.c | 1312 ---- .../libsrc/iomodule_v1_04_a/src/xiomodule.h | 581 -- .../iomodule_v1_04_a/src/xiomodule_extra.c | 158 - .../libsrc/iomodule_v1_04_a/src/xiomodule_g.c | 123 - .../libsrc/iomodule_v1_04_a/src/xiomodule_i.h | 129 - .../iomodule_v1_04_a/src/xiomodule_intr.c | 311 - .../iomodule_v1_04_a/src/xiomodule_io.h | 86 - .../libsrc/iomodule_v1_04_a/src/xiomodule_l.c | 381 -- .../libsrc/iomodule_v1_04_a/src/xiomodule_l.h | 446 -- .../iomodule_v1_04_a/src/xiomodule_options.c | 283 - .../iomodule_v1_04_a/src/xiomodule_selftest.c | 269 - .../iomodule_v1_04_a/src/xiomodule_stats.c | 149 - .../iomodule_v1_04_a/src/xiomodule_uart.c | 266 - .../src/xiomodule_uart_intr.c | 754 --- .../libsrc/standalone_v3_11_a/src/Makefile | 62 - .../libsrc/standalone_v3_11_a/src/_exit.c | 28 - .../libsrc/standalone_v3_11_a/src/bspconfig.h | 15 - .../standalone_v3_11_a/src/changelog.txt | 147 - .../libsrc/standalone_v3_11_a/src/config.make | 3 - .../libsrc/standalone_v3_11_a/src/errno.c | 12 - .../libsrc/standalone_v3_11_a/src/fcntl.c | 13 - .../libsrc/standalone_v3_11_a/src/fsl.h | 49 - .../src/hw_exception_handler.S | 652 -- .../libsrc/standalone_v3_11_a/src/inbyte.c | 14 - .../standalone_v3_11_a/src/mb_interface.h | 361 - .../src/microblaze_disable_dcache.S | 53 - .../src/microblaze_disable_exceptions.s | 37 - .../src/microblaze_disable_icache.s | 49 - .../src/microblaze_disable_interrupts.s | 53 - .../src/microblaze_enable_dcache.s | 49 - .../src/microblaze_enable_exceptions.s | 37 - .../src/microblaze_enable_icache.s | 49 - .../src/microblaze_enable_interrupts.s | 53 - .../src/microblaze_exception_handler.c | 84 - .../src/microblaze_exceptions_g.h | 14 - .../src/microblaze_exceptions_i.h | 73 - .../src/microblaze_flush_cache_ext.S | 51 - .../src/microblaze_flush_cache_ext_range.S | 60 - .../src/microblaze_flush_dcache.S | 56 - .../src/microblaze_flush_dcache_range.S | 94 - .../src/microblaze_init_dcache_range.S | 69 - .../src/microblaze_init_icache_range.S | 69 - .../src/microblaze_interrupt_handler.c | 109 - .../src/microblaze_interrupts_g.c | 30 - .../src/microblaze_interrupts_i.h | 61 - .../src/microblaze_invalidate_cache_ext.S | 52 - .../microblaze_invalidate_cache_ext_range.S | 61 - .../src/microblaze_invalidate_dcache.S | 72 - .../src/microblaze_invalidate_dcache_range.S | 98 - .../src/microblaze_invalidate_icache.S | 72 - .../src/microblaze_invalidate_icache_range.S | 82 - .../standalone_v3_11_a/src/microblaze_scrub.S | 195 - .../src/microblaze_update_dcache.S | 89 - .../src/microblaze_update_icache.S | 90 - .../libsrc/standalone_v3_11_a/src/outbyte.c | 15 - .../standalone_v3_11_a/src/profile/Makefile | 65 - .../src/profile/_profile_clean.c | 33 - .../src/profile/_profile_init.c | 80 - .../src/profile/_profile_timer_hw.c | 346 - .../src/profile/_profile_timer_hw.h | 292 - .../standalone_v3_11_a/src/profile/dummy.S | 50 - .../src/profile/mblaze_nt_types.h | 51 - .../standalone_v3_11_a/src/profile/profile.h | 127 - .../src/profile/profile_cg.c | 146 - .../src/profile/profile_config.h | 36 - .../src/profile/profile_hist.c | 53 - .../src/profile/profile_mcount_arm.S | 33 - .../src/profile/profile_mcount_mb.S | 55 - .../src/profile/profile_mcount_ppc.S | 58 - .../libsrc/standalone_v3_11_a/src/pvr.c | 70 - .../libsrc/standalone_v3_11_a/src/pvr.h | 264 - .../standalone_v3_11_a/src/xil_assert.c | 139 - .../standalone_v3_11_a/src/xil_assert.h | 195 - .../libsrc/standalone_v3_11_a/src/xil_cache.c | 105 - .../libsrc/standalone_v3_11_a/src/xil_cache.h | 456 -- .../src/xil_cache_vxworks.h | 103 - .../standalone_v3_11_a/src/xil_exception.c | 253 - .../standalone_v3_11_a/src/xil_exception.h | 128 - .../libsrc/standalone_v3_11_a/src/xil_hal.h | 71 - .../libsrc/standalone_v3_11_a/src/xil_io.c | 257 - .../libsrc/standalone_v3_11_a/src/xil_io.h | 366 -- .../standalone_v3_11_a/src/xil_macroback.h | 1069 --- .../src/xil_misc_psreset_api.c | 531 -- .../src/xil_misc_psreset_api.h | 286 - .../standalone_v3_11_a/src/xil_printf.h | 55 - .../standalone_v3_11_a/src/xil_testcache.c | 224 - .../standalone_v3_11_a/src/xil_testcache.h | 71 - .../standalone_v3_11_a/src/xil_testio.c | 304 - .../standalone_v3_11_a/src/xil_testio.h | 101 - .../standalone_v3_11_a/src/xil_testmem.c | 1004 --- .../standalone_v3_11_a/src/xil_testmem.h | 173 - .../libsrc/standalone_v3_11_a/src/xil_types.h | 160 - software/LED_Controller_bsp/system.mss | 39 - software/build.sh | 9 - software/micro_test/.project | 12 - software/micro_test/system.xml | 5833 ----------------- software/micro_test/system_bd.bmm | 16 - 281 files changed, 52355 deletions(-) delete mode 100644 software/.metadata/.lock delete mode 100644 software/.metadata/.plugins/com.xilinx.sdk.hw/dialog_settings.xml delete mode 100644 software/.metadata/.plugins/org.eclipse.cdt.core/LED_Controller.1599952462007.pdom delete mode 100644 software/.metadata/.plugins/org.eclipse.cdt.core/LED_Controller_bsp.1599952462009.pdom delete mode 100644 software/.metadata/.plugins/org.eclipse.cdt.make.core/LED_Controller.sc delete mode 100644 software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c delete mode 100644 software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp delete mode 100644 software/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml delete mode 100644 software/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/15/20a916bbf2f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/16/307548faf5f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/1e/506725ceebf9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/2d/006e0b7af3f9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/2e/f0ada384f3f9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/2f/e07ac67ce9f9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/32/904df402eaf9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/40/b0e30a03f6f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/42/9026d6c2f2f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/47/d023e48af3f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/48/40f584f1f5f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/4d/407df999cbf6001a1baecb89e4fed027 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/5/d0d0d38bcbf6001a1baecb89e4fed027 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/52/70186df9c8f6001a1baecb89e4fed027 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/55/a06a718beef9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/59/d08dccc1faf9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/59/f0ade47cfcf8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/62/109d196ee9f9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/64/500397c5faf9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/65/d071f129c9f6001a1baecb89e4fed027 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/6b/40bd6ed0faf9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/6c/d095fb4acaf6001a1baecb89e4fed027 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/7b/304a29e3f1f9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/8/4025aea1cbf6001a1baecb89e4fed027 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/81/403f3f97cbf6001a1baecb89e4fed027 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/83/305bbca1eef9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/8a/1060b65e03f9001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/8b/b03c3ee1e9f9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/9f/30387ff6f5f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/a/30342cfdf5f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/a8/309ae6a801f9001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/b0/40ccb57bcaf6001a1baecb89e4fed027 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/b5/d0dff3fbc7f6001a1baecb89e4fed027 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/b7/d09455cfe9f9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/b9/203e4dede9f9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/bb/e0bf3d9bf6f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/be/40cd6993cbf6001a1baecb89e4fed027 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a0337580cbf6001a1baecb89e4fed027 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/cd/305a6603f3f9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/ce/4018d09f01f9001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/d/60635348f2f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/d3/20aec944f7f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/d8/803d3aebf5f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/de/902d4436ebf9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/e9/20afbe7eeef9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/f0/e0c805f3f5f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/f2/80e7b08af3f9001a1594f754340f23a0 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/f3/d0c67fe9f6f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/f7/3077b75576f7001a116fc72c51299c73 delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.history/f9/e0bf90a2f6f8001a1591e56b2da69a2d delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.projects/LED_Controller/.indexes/e4/history.index delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.projects/LED_Controller/.indexes/e4/properties.index delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.projects/LED_Controller/.indexes/properties.index delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.projects/LED_Controller/.markers delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.projects/LED_Controller_bsp/.indexes/properties.index delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.projects/micro_test/.indexes/properties.index delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.root/12.tree delete mode 100644 software/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-LED_Controller.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-LED_Controller_bsp.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs delete mode 100644 software/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/37/refactorings.history delete mode 100644 software/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/37/refactorings.index delete mode 100644 software/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml delete mode 100644 software/.metadata/.plugins/org.eclipse.search/dialog_settings.xml delete mode 100644 software/.metadata/.plugins/org.eclipse.ui.editors/dialog_settings.xml delete mode 100644 software/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml delete mode 100644 software/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml delete mode 100644 software/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml delete mode 100644 software/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml delete mode 100644 software/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml delete mode 100644 software/.metadata/version.ini delete mode 100644 software/LED_Controller/.cproject delete mode 100644 software/LED_Controller/.project delete mode 100755 software/LED_Controller/Release/LED_Controller.elf delete mode 100644 software/LED_Controller/Release/makefile delete mode 100644 software/LED_Controller/Release/objects.mk delete mode 100644 software/LED_Controller/Release/sources.mk delete mode 100644 software/LED_Controller/Release/src/LEDBlinker.d delete mode 100644 software/LED_Controller/Release/src/LEDBlinker.o delete mode 100644 software/LED_Controller/Release/src/subdir.mk delete mode 100644 software/LED_Controller/src/LEDBlinker.c delete mode 100644 software/LED_Controller/src/README.txt delete mode 100644 software/LED_Controller/src/lscript.ld delete mode 100644 software/LED_Controller_bsp/.cproject delete mode 100644 software/LED_Controller_bsp/.project delete mode 100644 software/LED_Controller_bsp/.sdkproject delete mode 100644 software/LED_Controller_bsp/Makefile delete mode 100644 software/LED_Controller_bsp/libgen.options delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/_profile_timer_hw.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/include/bspconfig.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/fsl.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/mb_interface.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/mblaze_nt_types.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/include/microblaze_exceptions_g.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/microblaze_exceptions_i.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/microblaze_interrupts_i.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/profile.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/pvr.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xbasic_types.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xbram.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/include/xbram_hw.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/include/xdebug.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xenv.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xenv_none.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/include/xenv_standalone.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xenv_vxworks.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xil_assert.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xil_cache.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xil_cache_vxworks.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xil_exception.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xil_hal.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xil_io.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xil_macroback.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xil_misc_psreset_api.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xil_printf.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xil_testcache.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xil_testio.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xil_testmem.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xil_types.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xio.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/include/xiomodule.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/include/xiomodule_i.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/include/xiomodule_io.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/include/xiomodule_l.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/include/xparameters.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xstatus.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/include/xutil.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/include/xversion.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/lib/libc.a delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/lib/libm.a delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/lib/libxil.a delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/bram_v3_03_a/src/Makefile delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/bram_v3_03_a/src/xbram.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/bram_v3_03_a/src/xbram.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/bram_v3_03_a/src/xbram_g.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/bram_v3_03_a/src/xbram_hw.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/bram_v3_03_a/src/xbram_intr.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/bram_v3_03_a/src/xbram_selftest.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/bram_v3_03_a/src/xbram_sinit.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/Makefile delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/xbasic_types.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/xbasic_types.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/xdebug.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/xenv.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/xenv_linux.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/xenv_none.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/xenv_standalone.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/xenv_vxworks.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/xparameters.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/xstatus.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/xutil.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/xutil_memtest.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/xversion.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/common_v1_00_a/src/xversion.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/cpu_v1_15_a/src/Makefile delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/cpu_v1_15_a/src/fsl.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/cpu_v1_15_a/src/xio.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/cpu_v1_15_a/src/xio.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/Makefile delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/xiomodule.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/xiomodule.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/xiomodule_extra.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/xiomodule_g.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/xiomodule_i.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/xiomodule_intr.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/xiomodule_io.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/xiomodule_l.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/xiomodule_l.h delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/xiomodule_options.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/xiomodule_selftest.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/xiomodule_stats.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/xiomodule_uart.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/iomodule_v1_04_a/src/xiomodule_uart_intr.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/Makefile delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/_exit.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/bspconfig.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/changelog.txt delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/config.make delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/errno.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/fcntl.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/fsl.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/hw_exception_handler.S delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/inbyte.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/mb_interface.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_disable_dcache.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_disable_exceptions.s delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_disable_icache.s delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_disable_interrupts.s delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_enable_dcache.s delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_enable_exceptions.s delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_enable_icache.s delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_enable_interrupts.s delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_exception_handler.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_exceptions_g.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_exceptions_i.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_flush_cache_ext.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_flush_cache_ext_range.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_flush_dcache.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_flush_dcache_range.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_init_dcache_range.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_init_icache_range.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_interrupt_handler.c delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_interrupts_g.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_interrupts_i.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_invalidate_cache_ext.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_invalidate_cache_ext_range.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_invalidate_dcache.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_invalidate_dcache_range.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_invalidate_icache.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_invalidate_icache_range.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_scrub.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_update_dcache.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/microblaze_update_icache.S delete mode 100644 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/outbyte.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/profile/Makefile delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/profile/_profile_clean.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/profile/_profile_init.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/profile/_profile_timer_hw.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/profile/_profile_timer_hw.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/profile/dummy.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/profile/mblaze_nt_types.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/profile/profile.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/profile/profile_cg.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/profile/profile_config.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/profile/profile_hist.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/profile/profile_mcount_arm.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/profile/profile_mcount_mb.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/profile/profile_mcount_ppc.S delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/pvr.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/pvr.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_assert.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_assert.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_cache.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_cache.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_cache_vxworks.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_exception.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_exception.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_hal.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_io.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_io.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_macroback.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_misc_psreset_api.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_misc_psreset_api.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_printf.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_testcache.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_testcache.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_testio.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_testio.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_testmem.c delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_testmem.h delete mode 100755 software/LED_Controller_bsp/microblaze_mcs/libsrc/standalone_v3_11_a/src/xil_types.h delete mode 100644 software/LED_Controller_bsp/system.mss delete mode 100755 software/build.sh delete mode 100644 software/micro_test/.project delete mode 100644 software/micro_test/system.xml delete mode 100644 software/micro_test/system_bd.bmm diff --git a/software/.metadata/.lock b/software/.metadata/.lock deleted file mode 100644 index e69de29..0000000 diff --git a/software/.metadata/.plugins/com.xilinx.sdk.hw/dialog_settings.xml b/software/.metadata/.plugins/com.xilinx.sdk.hw/dialog_settings.xml deleted file mode 100644 index 6e2ee39..0000000 --- a/software/.metadata/.plugins/com.xilinx.sdk.hw/dialog_settings.xml +++ /dev/null @@ -1,4 +0,0 @@ - -
- -
diff --git a/software/.metadata/.plugins/org.eclipse.cdt.core/LED_Controller.1599952462007.pdom b/software/.metadata/.plugins/org.eclipse.cdt.core/LED_Controller.1599952462007.pdom deleted file mode 100644 index deb20bcf8dd2f8203ae753b76c28dacbdd2ceeab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208896 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Ϛ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

)lG;TB?)_KF*Y%606EjA|<{*%Xrh7Pb56U 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

ZHAET>o8Ey3|s)7nVP}nu$Aw_o0ZWD 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 ol(~2848}!dO|h*4DB1d!;&k;@Su8 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

L5%*`G*!aN}I6&-gd&E!-Q=CYC}>4sM# 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c b/software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c deleted file mode 100644 index 8b13789..0000000 --- a/software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c +++ /dev/null @@ -1 +0,0 @@ - diff --git a/software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp b/software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp deleted file mode 100644 index 8b13789..0000000 --- a/software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp +++ /dev/null @@ -1 +0,0 @@ - diff --git a/software/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml b/software/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml deleted file mode 100644 index 5ca0b77..0000000 --- a/software/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - -

-
diff --git a/software/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml b/software/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml deleted file mode 100644 index 2429847..0000000 --- a/software/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml +++ /dev/null @@ -1,8 +0,0 @@ - -
- -
-
-
-
-
diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/15/20a916bbf2f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/15/20a916bbf2f8001a1591e56b2da69a2d deleted file mode 100644 index ac9d80c..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/15/20a916bbf2f8001a1591e56b2da69a2d +++ /dev/null @@ -1,208 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, y << 8 + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, y << 8 + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, y << 8 + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, y << 8 + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/16/307548faf5f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/16/307548faf5f8001a1591e56b2da69a2d deleted file mode 100644 index 81aa6a4..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/16/307548faf5f8001a1591e56b2da69a2d +++ /dev/null @@ -1,212 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - Xint16 temp = (y << 8); - int x; - int y; - for (y = 0; y < 45; ++y) { - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/1e/506725ceebf9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/1e/506725ceebf9001a1594f754340f23a0 deleted file mode 100644 index fd3e611..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/1e/506725ceebf9001a1594f754340f23a0 +++ /dev/null @@ -1,252 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - properties = ((reversed << 6) + (background << 3) + foreground) << 8; -} - -void set_foreground(Xint8 color) { - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = enable; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, properties + c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/2d/006e0b7af3f9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/2d/006e0b7af3f9001a1594f754340f23a0 deleted file mode 100644 index 2a7c527..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/2d/006e0b7af3f9001a1594f754340f23a0 +++ /dev/null @@ -1,264 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - if (reversed) { - properties = ((foreground << 3) + background) << 8; - } else { - properties = ((background << 3) + foreground) << 8; - } -} - -void set_foreground(Xint8 color) { - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = enable; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - set_foreground(0b111); - set_background(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, properties + c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - set_foreground(0b111); - set_background(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { - set_foreground(escape_parameter_1 - 30); - } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { - set_background(escape_parameter_1 - 40); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/2e/f0ada384f3f9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/2e/f0ada384f3f9001a1594f754340f23a0 deleted file mode 100644 index de84024..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/2e/f0ada384f3f9001a1594f754340f23a0 +++ /dev/null @@ -1,266 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - if (reversed) { - properties = ((foreground << 3) + background) << 8; - } else { - properties = ((background << 3) + foreground) << 8; - } -} - -void set_foreground(Xint8 color) { - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = enable; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - set_foreground(0b111); - set_background(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, properties + c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - set_foreground(0b111); - set_background(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { - set_foreground(escape_parameter_1 - 30); - } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { - set_background(escape_parameter_1 - 40); - } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { - set_foreground(escape_parameter_1 - 90 + 8); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/2f/e07ac67ce9f9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/2f/e07ac67ce9f9001a1594f754340f23a0 deleted file mode 100644 index ee8b7a7..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/2f/e07ac67ce9f9001a1594f754340f23a0 +++ /dev/null @@ -1,247 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reverse = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void set_foreground(Xint8 color) { - foreground = color; - - XIOModule_DiscreteWrite(&gpo, 3, (reverse << 7) + (background << 4) + (foreground << 1) + 0); -} - -void set_background(Xint8 color) { - background = color; - - XIOModule_DiscreteWrite(&gpo, 3, (reverse << 7) + (background << 4) + (foreground << 1) + 0); -} - -void reverse(u8 enable) { - reversed = 0; - - XIOModule_DiscreteWrite(&gpo, 3, (reverse << 7) + (background << 4) + (foreground << 1) + 0); -} - - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/32/904df402eaf9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/32/904df402eaf9001a1594f754340f23a0 deleted file mode 100644 index a068a68..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/32/904df402eaf9001a1594f754340f23a0 +++ /dev/null @@ -1,252 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - properties = ((reversed << 6) + (background << 3) + foreground) << 8; -} - -void set_foreground(Xint8 color) { - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = 0; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/40/b0e30a03f6f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/40/b0e30a03f6f8001a1591e56b2da69a2d deleted file mode 100644 index 3060cdb..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/40/b0e30a03f6f8001a1591e56b2da69a2d +++ /dev/null @@ -1,213 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/42/9026d6c2f2f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/42/9026d6c2f2f8001a1591e56b2da69a2d deleted file mode 100644 index b82e8f5..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/42/9026d6c2f2f8001a1591e56b2da69a2d +++ /dev/null @@ -1,208 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, y << 8 + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, y << 8 + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, y << 8 + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/47/d023e48af3f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/47/d023e48af3f8001a1591e56b2da69a2d deleted file mode 100644 index 47ef832..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/47/d023e48af3f8001a1591e56b2da69a2d +++ /dev/null @@ -1,208 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/48/40f584f1f5f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/48/40f584f1f5f8001a1591e56b2da69a2d deleted file mode 100644 index 9bcdd39..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/48/40f584f1f5f8001a1591e56b2da69a2d +++ /dev/null @@ -1,210 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - Xint16 temp = (y << 8); - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/4d/407df999cbf6001a1baecb89e4fed027 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/4d/407df999cbf6001a1baecb89e4fed027 deleted file mode 100644 index ceef6a3..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/4d/407df999cbf6001a1baecb89e4fed027 +++ /dev/null @@ -1,202 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - - int i; - for (i = 1; i < 45*80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, i); - } - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = 1; i < (80 - x); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_2 - 1; - y = escape_parameter_1 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/5/d0d0d38bcbf6001a1baecb89e4fed027 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/5/d0d0d38bcbf6001a1baecb89e4fed027 deleted file mode 100644 index 559b143..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/5/d0d0d38bcbf6001a1baecb89e4fed027 +++ /dev/null @@ -1,199 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - - int i; - for (i = 0; i < 45*80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, i); - commit(); - } - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - int i; - for (i = 0; i < (80 - x); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); - commit(); - } -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_2 - 1; - y = escape_parameter_1 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/52/70186df9c8f6001a1baecb89e4fed027 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/52/70186df9c8f6001a1baecb89e4fed027 deleted file mode 100644 index 87e4d1c..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/52/70186df9c8f6001a1baecb89e4fed027 +++ /dev/null @@ -1,204 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 2); - XIOModule_DiscreteClear(&gpo, 3, 2); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - - int i; - for (i = 0; i < 45*80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, i); - commit(); - } - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - int i; - for (i = 0; i < (80 - x); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); - commit(); - } -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - // Indicate that we are working - XIOModule_DiscreteClear(&gpo, 3, 1); - - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_2 - 1; - y = escape_parameter_1 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } - - // Indicate that we are done - XIOModule_DiscreteSet(&gpo, 3, 1); -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/55/a06a718beef9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/55/a06a718beef9001a1594f754340f23a0 deleted file mode 100644 index 6a6bb79..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/55/a06a718beef9001a1594f754340f23a0 +++ /dev/null @@ -1,256 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - properties = ((reversed << 6) + (background << 3) + foreground) << 8; -} - -void set_foreground(Xint8 color) { - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = enable; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, properties + c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { - set_foreground(escape_parameter_1 - 30); - } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { - set_background(escape_parameter_1 - 40); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/59/d08dccc1faf9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/59/d08dccc1faf9001a1594f754340f23a0 deleted file mode 100644 index 4700a28..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/59/d08dccc1faf9001a1594f754340f23a0 +++ /dev/null @@ -1,268 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - if (reversed) { - properties = ((foreground << 4) + background) << 8; - } else { - properties = ((background << 4) + foreground) << 8; - } -} - -void set_foreground(Xint8 color) { - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = enable; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - set_foreground(0b111); - set_background(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, properties + c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - set_foreground(0b111); - set_background(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { - set_foreground(escape_parameter_1 - 30); - } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { - set_background(escape_parameter_1 - 40); - } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { - set_foreground(escape_parameter_1 - 90 + 8); - } else if (escape_parameter_1 >= 100 && escape_parameter_1 <= 107) { - set_background(escape_parameter_1 - 100 + 8); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/59/f0ade47cfcf8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/59/f0ade47cfcf8001a1591e56b2da69a2d deleted file mode 100644 index d5a3624..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/59/f0ade47cfcf8001a1591e56b2da69a2d +++ /dev/null @@ -1,230 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void reverse(u8 enable) { - if (enable) { - XIOModule_DiscreteSet(&gpo, 3, 2); - } else { - XIOModule_DiscreteClear(&gpo, 3, 2); - } -} - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } - if (escape_parameter_1 == 7) { - reverse(1); - } - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/62/109d196ee9f9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/62/109d196ee9f9001a1594f754340f23a0 deleted file mode 100644 index d10d775..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/62/109d196ee9f9001a1594f754340f23a0 +++ /dev/null @@ -1,232 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void reverse(u8 enable) { - if (enable) { - XIOModule_DiscreteSet(&gpo, 3, 2); - } else { - XIOModule_DiscreteClear(&gpo, 3, 2); - } -} - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/64/500397c5faf9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/64/500397c5faf9001a1594f754340f23a0 deleted file mode 100644 index dc9ff18..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/64/500397c5faf9001a1594f754340f23a0 +++ /dev/null @@ -1,268 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - if (reversed) { - properties = ((foreground << 4) + background) << 8; - } else { - properties = ((background << 4) + foreground) << 8; - } -} - -void set_foreground(Xint8 color) {x - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = enable; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - set_foreground(0b111); - set_background(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < (45+2); ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < (80+24); ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, properties + c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - set_foreground(0b111); - set_background(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { - set_foreground(escape_parameter_1 - 30); - } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { - set_background(escape_parameter_1 - 40); - } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { - set_foreground(escape_parameter_1 - 90 + 8); - } else if (escape_parameter_1 >= 100 && escape_parameter_1 <= 107) { - set_background(escape_parameter_1 - 100 + 8); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/65/d071f129c9f6001a1baecb89e4fed027 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/65/d071f129c9f6001a1baecb89e4fed027 deleted file mode 100644 index 64deafa..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/65/d071f129c9f6001a1baecb89e4fed027 +++ /dev/null @@ -1,204 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 2); - XIOModule_DiscreteClear(&gpo, 3, 2); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - - int i; - for (i = 0; i < 45*80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, i); - commit(); - } - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - int i; - for (i = 0; i < (80 - x); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); - commit(); - } -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - // Indicate that we are working - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_2 - 1; - y = escape_parameter_1 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } - - // Indicate that we are done - XIOModule_DiscreteSet(&gpo, 3, 1); -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/6b/40bd6ed0faf9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/6b/40bd6ed0faf9001a1594f754340f23a0 deleted file mode 100644 index 09b92d1..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/6b/40bd6ed0faf9001a1594f754340f23a0 +++ /dev/null @@ -1,268 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - if (reversed) { - properties = ((foreground << 4) + background) << 8; - } else { - properties = ((background << 4) + foreground) << 8; - } -} - -void set_foreground(Xint8 color) {x - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = enable; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - set_foreground(0b111); - set_background(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < (45+2); ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < (80+24); ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < (80+24); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, properties + c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - set_foreground(0b111); - set_background(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { - set_foreground(escape_parameter_1 - 30); - } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { - set_background(escape_parameter_1 - 40); - } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { - set_foreground(escape_parameter_1 - 90 + 8); - } else if (escape_parameter_1 >= 100 && escape_parameter_1 <= 107) { - set_background(escape_parameter_1 - 100 + 8); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/6c/d095fb4acaf6001a1baecb89e4fed027 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/6c/d095fb4acaf6001a1baecb89e4fed027 deleted file mode 100644 index 563887e..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/6c/d095fb4acaf6001a1baecb89e4fed027 +++ /dev/null @@ -1,204 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 2); - XIOModule_DiscreteClear(&gpo, 3, 2); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - - int i; - for (i = 0; i < 45*80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, i); - commit(); - } - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - int i; - for (i = 0; i < (80 - x); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); - commit(); - } -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - XIOModule_DiscreteClear(&gpo, 3, 1); - - // Indicate that we are working - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_2 - 1; - y = escape_parameter_1 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } - - // Indicate that we are done - XIOModule_DiscreteSet(&gpo, 3, 1); -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/7b/304a29e3f1f9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/7b/304a29e3f1f9001a1594f754340f23a0 deleted file mode 100644 index 87cce62..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/7b/304a29e3f1f9001a1594f754340f23a0 +++ /dev/null @@ -1,260 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - properties = ((reversed << 6) + (background << 3) + foreground) << 8; -} - -void set_foreground(Xint8 color) { - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = enable; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - set_foreground(0b111); - set_background(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, properties + c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - set_foreground(0b111); - set_background(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { - set_foreground(escape_parameter_1 - 30); - } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { - set_background(escape_parameter_1 - 40); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/8/4025aea1cbf6001a1baecb89e4fed027 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/8/4025aea1cbf6001a1baecb89e4fed027 deleted file mode 100644 index d130826..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/8/4025aea1cbf6001a1baecb89e4fed027 +++ /dev/null @@ -1,204 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - - int i; - for (i = 1; i < 45*80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, i); - } - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = 1; i < (80 - x); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_2 - 1; - y = escape_parameter_1 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/81/403f3f97cbf6001a1baecb89e4fed027 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/81/403f3f97cbf6001a1baecb89e4fed027 deleted file mode 100644 index 57f473a..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/81/403f3f97cbf6001a1baecb89e4fed027 +++ /dev/null @@ -1,202 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - - int i; - for (i = 0; i < 45*80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, i); - } - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = 0; i < (80 - x); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_2 - 1; - y = escape_parameter_1 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/83/305bbca1eef9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/83/305bbca1eef9001a1594f754340f23a0 deleted file mode 100644 index b9733da..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/83/305bbca1eef9001a1594f754340f23a0 +++ /dev/null @@ -1,258 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - properties = ((reversed << 6) + (background << 3) + foreground) << 8; -} - -void set_foreground(Xint8 color) { - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = enable; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, properties + c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - set_foreground(0b111); - set_background(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { - set_foreground(escape_parameter_1 - 30); - } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { - set_background(escape_parameter_1 - 40); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/8a/1060b65e03f9001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/8a/1060b65e03f9001a1591e56b2da69a2d deleted file mode 100644 index 4fd03a0..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/8a/1060b65e03f9001a1591e56b2da69a2d +++ /dev/null @@ -1,231 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void reverse(u8 enable) { - if (enable) { - XIOModule_DiscreteSet(&gpo, 3, 2); - } else { - XIOModule_DiscreteClear(&gpo, 3, 2); - } -} - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/8b/b03c3ee1e9f9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/8b/b03c3ee1e9f9001a1594f754340f23a0 deleted file mode 100644 index 9e1e645..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/8b/b03c3ee1e9f9001a1594f754340f23a0 +++ /dev/null @@ -1,248 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void set_foreground(Xint8 color) { - foreground = color; - - properties = ((reversed << 6) + (background << 3) + foreground) << 8; -} - -void set_background(Xint8 color) { - background = color; - - XIOModule_DiscreteWrite(&gpo, 3, (reversed << 7) + (background << 4) + (foreground << 1) + 0); -} - -void reverse(u8 enable) { - reversed = 0; - - XIOModule_DiscreteWrite(&gpo, 3, (reversed << 7) + (background << 4) + (foreground << 1) + 0); -} - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/9f/30387ff6f5f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/9f/30387ff6f5f8001a1591e56b2da69a2d deleted file mode 100644 index a0e456d..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/9f/30387ff6f5f8001a1591e56b2da69a2d +++ /dev/null @@ -1,211 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/a/30342cfdf5f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/a/30342cfdf5f8001a1591e56b2da69a2d deleted file mode 100644 index cc5234c..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/a/30342cfdf5f8001a1591e56b2da69a2d +++ /dev/null @@ -1,213 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/a8/309ae6a801f9001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/a8/309ae6a801f9001a1591e56b2da69a2d deleted file mode 100644 index 4468200..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/a8/309ae6a801f9001a1591e56b2da69a2d +++ /dev/null @@ -1,230 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void reverse(u8 enable) { - if (enable) { - XIOModule_DiscreteSet(&gpo, 3, 2); - } else { - XIOModule_DiscreteClear(&gpo, 3, 2); - } -} - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/b0/40ccb57bcaf6001a1baecb89e4fed027 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/b0/40ccb57bcaf6001a1baecb89e4fed027 deleted file mode 100644 index e411712..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/b0/40ccb57bcaf6001a1baecb89e4fed027 +++ /dev/null @@ -1,198 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 2); - XIOModule_DiscreteClear(&gpo, 3, 2); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - - int i; - for (i = 0; i < 45*80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, i); - commit(); - } - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - int i; - for (i = 0; i < (80 - x); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); - commit(); - } -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_2 - 1; - y = escape_parameter_1 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/b5/d0dff3fbc7f6001a1baecb89e4fed027 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/b5/d0dff3fbc7f6001a1baecb89e4fed027 deleted file mode 100644 index 56730f2..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/b5/d0dff3fbc7f6001a1baecb89e4fed027 +++ /dev/null @@ -1,204 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 2); - XIOModule_DiscreteClear(&gpo, 3, 2); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - - int i; - for (i = 0; i < 45*80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, i); - commit(); - } - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - int i; - for (i = 0; i < (80 - x); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); - commit(); - } -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - // Indicate that we are working - XIOModule_DiscreteReset(&gpo, 3, 1); - - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_2 - 1; - y = escape_parameter_1 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } - - // Indicate that we are done - XIOModule_DiscreteSet(&gpo, 3, 1); -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/b7/d09455cfe9f9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/b7/d09455cfe9f9001a1594f754340f23a0 deleted file mode 100644 index a0b871c..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/b7/d09455cfe9f9001a1594f754340f23a0 +++ /dev/null @@ -1,246 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void set_foreground(Xint8 color) { - foreground = color; - - XIOModule_DiscreteWrite(&gpo, 3, (reversed << 7) + (background << 4) + (foreground << 1) + 0); -} - -void set_background(Xint8 color) { - background = color; - - XIOModule_DiscreteWrite(&gpo, 3, (reversed << 7) + (background << 4) + (foreground << 1) + 0); -} - -void reverse(u8 enable) { - reversed = 0; - - XIOModule_DiscreteWrite(&gpo, 3, (reversed << 7) + (background << 4) + (foreground << 1) + 0); -} - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/b9/203e4dede9f9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/b9/203e4dede9f9001a1594f754340f23a0 deleted file mode 100644 index a068a68..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/b9/203e4dede9f9001a1594f754340f23a0 +++ /dev/null @@ -1,252 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - properties = ((reversed << 6) + (background << 3) + foreground) << 8; -} - -void set_foreground(Xint8 color) { - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = 0; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/bb/e0bf3d9bf6f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/bb/e0bf3d9bf6f8001a1591e56b2da69a2d deleted file mode 100644 index e1804aa..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/bb/e0bf3d9bf6f8001a1591e56b2da69a2d +++ /dev/null @@ -1,212 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/be/40cd6993cbf6001a1baecb89e4fed027 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/be/40cd6993cbf6001a1baecb89e4fed027 deleted file mode 100644 index 337877f..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/be/40cd6993cbf6001a1baecb89e4fed027 +++ /dev/null @@ -1,202 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - - int i; - for (i = 0; i < 45*80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, i); - commit(); - } - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = 0; i < (80 - x); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_2 - 1; - y = escape_parameter_1 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a0337580cbf6001a1baecb89e4fed027 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a0337580cbf6001a1baecb89e4fed027 deleted file mode 100644 index 54258cd..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a0337580cbf6001a1baecb89e4fed027 +++ /dev/null @@ -1,198 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - - int i; - for (i = 0; i < 45*80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, i); - commit(); - } - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - int i; - for (i = 0; i < (80 - x); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); - commit(); - } -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_2 - 1; - y = escape_parameter_1 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/cd/305a6603f3f9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/cd/305a6603f3f9001a1594f754340f23a0 deleted file mode 100644 index 5eb6da3..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/cd/305a6603f3f9001a1594f754340f23a0 +++ /dev/null @@ -1,264 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - if (reversed) { - properties = ((background << 3) + foreground) << 8; - } else { - properties = ((foreground << 3) + background) << 8; - } -} - -void set_foreground(Xint8 color) { - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = enable; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - set_foreground(0b111); - set_background(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, properties + c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - set_foreground(0b111); - set_background(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { - set_foreground(escape_parameter_1 - 30); - } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { - set_background(escape_parameter_1 - 40); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/ce/4018d09f01f9001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/ce/4018d09f01f9001a1591e56b2da69a2d deleted file mode 100644 index dc5a8db..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/ce/4018d09f01f9001a1591e56b2da69a2d +++ /dev/null @@ -1,231 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void reverse(u8 enable) { - if (enable) { - XIOModule_DiscreteSet(&gpo, 3, 2); - } else { - XIOModule_DiscreteClear(&gpo, 3, 2); - } -} - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } - if (escape_parameter_1 == 7) { - reverse(1); - } - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/d/60635348f2f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/d/60635348f2f8001a1591e56b2da69a2d deleted file mode 100644 index 996c8d6..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/d/60635348f2f8001a1591e56b2da69a2d +++ /dev/null @@ -1,205 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = 1; i < 45*80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = 1; i < (80 - x); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/d3/20aec944f7f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/d3/20aec944f7f8001a1591e56b2da69a2d deleted file mode 100644 index 86b6b16..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/d3/20aec944f7f8001a1591e56b2da69a2d +++ /dev/null @@ -1,228 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void reverse(u8 enable) { - if (enable) { - XIOModule_DiscreteSet(&gpo, 3, 2); - } else { - XIOModule_DiscreteClear(&gpo, 3, 2); - } -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } - if (escape_parameter_1 == 7) { - reverse(1); - } - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/d8/803d3aebf5f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/d8/803d3aebf5f8001a1591e56b2da69a2d deleted file mode 100644 index a06aa99..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/d8/803d3aebf5f8001a1591e56b2da69a2d +++ /dev/null @@ -1,209 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/de/902d4436ebf9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/de/902d4436ebf9001a1594f754340f23a0 deleted file mode 100644 index 9efcaa2..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/de/902d4436ebf9001a1594f754340f23a0 +++ /dev/null @@ -1,252 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - properties = ((reversed << 6) + (background << 3) + foreground) << 8; -} - -void set_foreground(Xint8 color) { - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = 0; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, properties + c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/e9/20afbe7eeef9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/e9/20afbe7eeef9001a1594f754340f23a0 deleted file mode 100644 index 8ae3017..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/e9/20afbe7eeef9001a1594f754340f23a0 +++ /dev/null @@ -1,256 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - properties = ((reversed << 6) + (background << 3) + foreground) << 8; -} - -void set_foreground(Xint8 color) { - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = enable; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, properties + c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { - set_foreground(escape_parameter_1 - 30); - } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { - set_foreground(escape_parameter_1 - 40); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/f0/e0c805f3f5f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/f0/e0c805f3f5f8001a1591e56b2da69a2d deleted file mode 100644 index 54762a7..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/f0/e0c805f3f5f8001a1591e56b2da69a2d +++ /dev/null @@ -1,212 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/f2/80e7b08af3f9001a1594f754340f23a0 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/f2/80e7b08af3f9001a1594f754340f23a0 deleted file mode 100644 index da9c5f0..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/f2/80e7b08af3f9001a1594f754340f23a0 +++ /dev/null @@ -1,268 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - if (reversed) { - properties = ((foreground << 3) + background) << 8; - } else { - properties = ((background << 3) + foreground) << 8; - } -} - -void set_foreground(Xint8 color) { - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = enable; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - set_foreground(0b111); - set_background(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, properties + c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - set_foreground(0b111); - set_background(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { - set_foreground(escape_parameter_1 - 30); - } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { - set_background(escape_parameter_1 - 40); - } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { - set_foreground(escape_parameter_1 - 90 + 8); - } else if (escape_parameter_1 >= 100 && escape_parameter_1 <= 107) { - set_background(escape_parameter_1 - 100 + 8); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/f3/d0c67fe9f6f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/f3/d0c67fe9f6f8001a1591e56b2da69a2d deleted file mode 100644 index a64fa95..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/f3/d0c67fe9f6f8001a1591e56b2da69a2d +++ /dev/null @@ -1,220 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void reverse(u8 enable) { - if (enable) { - XIOModule_DiscreteSet(&gpo, 3, 2); - } else { - XIOModule_DiscreteClear(&gpo, 3, 2); - } -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/f7/3077b75576f7001a116fc72c51299c73 b/software/.metadata/.plugins/org.eclipse.core.resources/.history/f7/3077b75576f7001a116fc72c51299c73 deleted file mode 100644 index f715316..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/f7/3077b75576f7001a116fc72c51299c73 +++ /dev/null @@ -1,205 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = 1; i < 45*80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = 1; i < (80 - x); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_2 - 1; - y = escape_parameter_1 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.history/f9/e0bf90a2f6f8001a1591e56b2da69a2d b/software/.metadata/.plugins/org.eclipse.core.resources/.history/f9/e0bf90a2f6f8001a1591e56b2da69a2d deleted file mode 100644 index 965d2be..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.history/f9/e0bf90a2f6f8001a1591e56b2da69a2d +++ /dev/null @@ -1,220 +0,0 @@ -#include -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void reverse(uint8_t enable) { - if (enable) { - XIOModule_DiscreteSet(&gpo, 3, 2); - } else { - XIOModule_DiscreteClear(&gpo, 3, 2); - } -} - -void clear_screen() { - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < 45; ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < 80; ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < 80; ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.projects/LED_Controller/.indexes/e4/history.index b/software/.metadata/.plugins/org.eclipse.core.resources/.projects/LED_Controller/.indexes/e4/history.index deleted file mode 100644 index f8341f10a0c321a6a44ef698c88bfce4ed9cb425..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1226 zcmYk)Ye-XJ9LMp;t>_}u7AUsfjKp%V<+33obRJ^SFs(&dl28Xm7qjNPHny1yd{Ig< zOW8D|sU#C}?M($~Mp16&%tJwpC|Yclx@Mcp-K>Z`&!Yd^4?n)=e-4L*5XwN@g2o0_ zLHS-N#LEP}FzCC+7Y9>!imS&5 z7J*Yj;?{HZozSK4gLu!sKXD1VrRW28<(a(K0nj;n)Pvn5k{3aDwJ^jhezF$8K7V1B z^ko&ndEk5taYwQ2GxX3_;!JntEOhUh8Qk&eCJoS~!*1-H+nd$UZNa(z)OX;}4^OaD z&+YnBD;n+-X&-;YF7Eqk%K#qN6Q^>RJJ4Nk#_&Eg>Nos~|L=IMz1aEoDR~UIbiWxp zGubvD1y1XFuzR1H2BBN_{qvGr(2c4tym$E4v!QE>iHjw|-^-vsm!I}#MH0G}n|5hi z6#CkviQMB_9f2-gB2F#0hoMtW;>MEQ0qF6<%jA7?{T&f-51nnmZrb+l`4Vu8Pmi5H zl06395!Pa-RfiSO>F*Oa@c(@AQDsXE@wjzP;UPhPqh}|5J>^uMePB9@cw6k#SN(sO z?QvGxTNAy|H9t<0eQBu~I`X7_rsgJe>0ROs^R^Q@swQsT)og^$xmQK{?g#o;;2vAu rG3-pwN*Q$iIwkS?uwV-88P@^qnw$#>7jRp-g6uy diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.projects/LED_Controller/.indexes/e4/properties.index b/software/.metadata/.plugins/org.eclipse.core.resources/.projects/LED_Controller/.indexes/e4/properties.index deleted file mode 100644 index 1fd1fb162dbf31850906d1df61b2c9d4c1721968..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmYj}F%H5&3mL36 zn!UV1HAx4#R89)ZJ~!y%>LtMP%1TV$f~yW_b)lgjJt~LaEXSRntTPy^oc}{M#wUjF IMQ^*h0a^?$NB{r; diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.projects/LED_Controller/.indexes/properties.index b/software/.metadata/.plugins/org.eclipse.core.resources/.projects/LED_Controller/.indexes/properties.index deleted file mode 100644 index 698a29094252d75543dd27e0eb0adbfe31df7960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417 zcmZ{fKTpFj5XCPkLnj0x3`~H;d~*IbGtddK@BxtP9FB!!M~+j{Z%@)r4PvjtTYjSXlowFS|f547Q!iJP=JgmyJniBxg!tkSN-@rx87&{rR z7KU*WH^o2V0akfYh7egNk%U%VPbg}S!a9N*F1*^)g!iT7;J8=Tz|*L-G9yYeV7o&a z2_0$TQ!p;rCM|LnA6WxfceQQbc}wtkJ`>}-s;WH6iiEKeXWI-PK-81>%EiniM0G;>?DAS;z|-;}6S-Uu!bLViyXQZ?Ih?u_U`~Y82dutCy2`v2wRP xJd{54u})`_Dwv?Hf_{#b{)Wd@N&1+~pEH%dTjf;(y~PHaLpPL<_P76i{s-R!MCAYg diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.projects/LED_Controller_bsp/.indexes/properties.index b/software/.metadata/.plugins/org.eclipse.core.resources/.projects/LED_Controller_bsp/.indexes/properties.index deleted file mode 100644 index eabe02c8c9338ef37378021f22ec083de415ab97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmbu3u@ZtX5JV4c?By41Zy*vdwc0uU0uz%XlbJx6aQOX_v9+_MvVXf diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.projects/micro_test/.indexes/properties.index b/software/.metadata/.plugins/org.eclipse.core.resources/.projects/micro_test/.indexes/properties.index deleted file mode 100644 index bd8c2e6050f0594ed057c308a0d543bbcfdb7d64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmXYq!41MN3;!~junO=F00lmsPWdQ{QJeNHFc1OU^{2`*&nh9r3p zSJ#(|-OYU|_GD^suJ$R!bH8P#CA0`vjHZlD6pyIlBX0p!sF-hD8%icC>{ls&dr#rZ LUa9(hFf{!Dwi+vr diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version b/software/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version deleted file mode 100644 index 25cb955..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/software/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index deleted file mode 100644 index 787d630bd6de331fb3b4d0f23e91cfea1dfdc327..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104 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 diff --git a/software/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/software/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources deleted file mode 100644 index 507116e186596badc456cb69e168c143db370705..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 505 zcmZ?R*xjhShe1S2b=vdAllRFf=Oz}Hq!uZZBqrsgaw!KVmM8?L7AP26Di|1885&y| znkhKD28SpZ85kLGCFi6j7P+M6lqAOI7p3c^Cg)@p6sPJXr27 znpB#uSDFb?lmaruwW1)iD6u3nKM%WchGqr^CT8Y_mS*PWI4y^mi?Ci_ucRn7)z;96 n>p;Zs&tR_xe(tH>U4G1gmR?Uw%qb@9cZe#QcphRjZr=j{S#7i0 diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prefs deleted file mode 100644 index f72053c..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.cdt.core.showSourceRootsAtTopLevelOfProject=true diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-LED_Controller.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-LED_Controller.prefs deleted file mode 100644 index 2c80fdc..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-LED_Controller.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -indexer/preferenceScope=0 -language.settings.providers.disabled=true diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-LED_Controller_bsp.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-LED_Controller_bsp.prefs deleted file mode 100644 index 2c80fdc..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-LED_Controller_bsp.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -indexer/preferenceScope=0 -language.settings.providers.disabled=true diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs deleted file mode 100644 index b8c9267..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.cdt.debug.core.cDebug.default_source_containers=\n\n\n\n\n\n\n\n diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs deleted file mode 100644 index 4b89eca..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs +++ /dev/null @@ -1,5 +0,0 @@ -eclipse.preferences.version=1 -properties/LED_Controller.xilinx.gnu.mb.exe.1814969487/xilinx.gnu.mb.exe.debug.32422249=\#\n\#Fri Sep 18 21\:44\:22 CEST 2020\nxilinx.gnu.mb.c.toolchain.linker.debug.963016491\=\\\#\\n\\\#Fri Sep 18 21\\\:44\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.compiler.debug.1526133289.453942197\=\\\#\\n\\\#Fri Sep 18 21\\\:44\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.debug.32422249.1916704164\=\\\#\\n\\\#Fri Sep 18 21\\\:44\\\:22 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.compiler.debug.1526133289.444111638\=\\\#\\n\\\#Thu Sep 17 17\\\:39\\\:25 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.debug.32422249\=\\\#\\n\\\#Fri Sep 18 21\\\:44\\\:22 CEST 2020\\nrcState\\\=0\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.compiler.debug.1526133289\=\\\#\\n\\\#Fri Sep 18 21\\\:44\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.size.debug.1827824083\=\\\#\\n\\\#Fri Sep 18 21\\\:44\\\:22 CEST 2020\\nrebuildState\\\=false\\n\norg.eclipse.cdt.managedbuilder.ui.rcbs.835513525\=\\\#\\n\\\#Thu Sep 17 17\\\:39\\\:25 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.toolchain.archiver.967447973\=\\\#\\n\\\#Fri Sep 18 21\\\:44\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.elfcheck.mb.debug.497589591\=\\\#\\n\\\#Fri Sep 18 21\\\:44\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.debug.32422249.1321561043\=\\\#\\n\\\#Thu Sep 17 17\\\:39\\\:25 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.cxx.toolchain.linker.debug.2014002494\=\\\#\\n\\\#Fri Sep 18 21\\\:44\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.debug.toolchain.1375698673\=\\\#\\n\\\#Fri Sep 18 21\\\:44\\\:22 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.assembler.debug.503356807\=\\\#\\n\\\#Fri Sep 18 21\\\:44\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.cxx.toolchain.compiler.debug.2077065818\=\\\#\\n\\\#Fri Sep 18 21\\\:44\\\:22 CEST 2020\\nrebuildState\\\=false\\n\norg.eclipse.cdt.managedbuilder.ui.rcbs.704915466\=\\\#\\n\\\#Fri Sep 18 21\\\:44\\\:22 CEST 2020\\nrebuildState\\\=true\\n\n -properties/LED_Controller.xilinx.gnu.mb.exe.1814969487/xilinx.gnu.mb.exe.release.1608365019=\#\n\#Fri Sep 18 21\:59\:16 CEST 2020\norg.eclipse.cdt.managedbuilder.ui.rcbs.964590779\=\\\#\\n\\\#Thu Sep 17 17\\\:41\\\:22 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.compiler.release.1363891138.1568151430\=\\\#\\n\\\#Thu Sep 17 17\\\:41\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.compiler.release.1363891138.1347973672\=\\\#\\n\\\#Thu Sep 17 17\\\:41\\\:22 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.cxx.toolchain.linker.release.219817069\=\\\#\\n\\\#Fri Sep 18 21\\\:59\\\:16 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.elfcheck.mb.release.2093836222\=\\\#\\n\\\#Fri Sep 18 21\\\:59\\\:16 CEST 2020\\nrebuildState\\\=false\\n\norg.eclipse.cdt.managedbuilder.ui.rcbs.585520295\=\\\#\\n\\\#Thu Sep 17 17\\\:39\\\:56 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.compiler.release.1363891138.188090075\=\\\#\\n\\\#Fri Sep 18 21\\\:59\\\:16 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.cxx.toolchain.compiler.release.623808407\=\\\#\\n\\\#Fri Sep 18 21\\\:59\\\:16 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.release.1608365019\=\\\#\\n\\\#Fri Sep 18 21\\\:59\\\:16 CEST 2020\\nrcState\\\=0\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.compiler.release.1363891138.1472073695\=\\\#\\n\\\#Thu Sep 17 17\\\:39\\\:56 CEST 2020\\nrebuildState\\\=true\\n\norg.eclipse.cdt.managedbuilder.ui.rcbs.303281880\=\\\#\\n\\\#Thu Sep 17 17\\\:41\\\:22 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.toolchain.archiver.728941664\=\\\#\\n\\\#Fri Sep 18 21\\\:59\\\:16 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.size.release.805765542\=\\\#\\n\\\#Fri Sep 18 21\\\:59\\\:16 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.release.1608365019.2101405724\=\\\#\\n\\\#Fri Sep 18 21\\\:59\\\:16 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.release.toolchain.449620394\=\\\#\\n\\\#Fri Sep 18 21\\\:59\\\:16 CEST 2020\\nrebuildState\\\=false\\n\norg.eclipse.cdt.managedbuilder.ui.rcbs.941823551\=\\\#\\n\\\#Fri Sep 18 21\\\:59\\\:16 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.linker.release.948464890\=\\\#\\n\\\#Fri Sep 18 21\\\:59\\\:16 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.release.1608365019.1177911836\=\\\#\\n\\\#Thu Sep 17 17\\\:41\\\:22 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.assembler.release.1529446162\=\\\#\\n\\\#Fri Sep 18 21\\\:59\\\:16 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.compiler.release.1363891138\=\\\#\\n\\\#Fri Sep 18 21\\\:59\\\:16 CEST 2020\\nrebuildState\\\=false\\n\n -properties/LED_Controller.xilinx.gnu.mb.exe.1958147925/xilinx.gnu.mb.exe.debug.1340360104=\#\n\#Sun Sep 13 01\:13\:41 CEST 2020\nxilinx.gnu.mb.cxx.toolchain.compiler.debug.1718510779\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.elfcheck.mb.debug.1120413088\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.toolchain.archiver.1415277683\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.compiler.debug.284561060\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.debug.1340360104\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:28 CEST 2020\\nrcState\\\=0\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.cxx.toolchain.linker.debug.819611121\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.size.debug.2065098265\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.assembler.debug.1411310899\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.debug.toolchain.2009906249\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.linker.debug.1517138700\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\n -properties/LED_Controller.xilinx.gnu.mb.exe.1958147925/xilinx.gnu.mb.exe.release.183079614=\#\n\#Sun Sep 13 01\:13\:33 CEST 2020\nxilinx.gnu.mb.c.toolchain.assembler.release.39538095\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.elfcheck.mb.release.1610739964\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.cxx.toolchain.compiler.release.1977882343\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.toolchain.archiver.340405373\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.size.release.414266922\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.exe.release.183079614\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.exe.release.toolchain.659377477\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.cxx.toolchain.linker.release.1164015715\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.compiler.release.910828759\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.linker.release.105016765\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\n diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs deleted file mode 100644 index 5e2da66..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs +++ /dev/null @@ -1,4 +0,0 @@ -eclipse.preferences.version=1 -spelling_locale_initialized=true -useAnnotationsPrefPage=true -useQuickDiffPrefPage=true diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index dffc6b5..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -version=1 diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs deleted file mode 100644 index 57e3b77..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs +++ /dev/null @@ -1,5 +0,0 @@ -//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.applicationLaunchType=org.eclipse.cdt.dsf.gdb.launch.localCLaunch,debug;org.eclipse.cdt.cdi.launch.localCLaunch,run -//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.attachLaunchType=org.eclipse.cdt.dsf.gdb.launch.attachCLaunch,debug -//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.postmortemLaunchType=org.eclipse.cdt.dsf.gdb.launch.coreCLaunch,debug -//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.remoteApplicationLaunchType=org.eclipse.rse.remotecdt.dsf.debug,debug -eclipse.preferences.version=1 diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs deleted file mode 100644 index a2917e5..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=\n\n -preferredTargets=org.eclipse.cdt.debug.ui.toggleCBreakpointTarget\:org.eclipse.cdt.debug.ui.toggleCBreakpointTarget| diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs deleted file mode 100644 index cec65c4..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.search.defaultPerspective=org.eclipse.search.defaultPerspective.none diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs deleted file mode 100644 index eff1d89..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs +++ /dev/null @@ -1,2 +0,0 @@ -browsers=\n\n\n -eclipse.preferences.version=1 diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs deleted file mode 100644 index 61f3bb8..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -overviewRuler_migration=migrated_3.1 diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs deleted file mode 100644 index 3457147..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs +++ /dev/null @@ -1,6 +0,0 @@ -PROBLEMS_FILTERS_MIGRATE=true -TASKS_FILTERS_MIGRATE=true -eclipse.preferences.version=1 -platformState=1599945748943 -quickStart=false -tipsAndTricks=true diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs deleted file mode 100644 index 62252c0..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs +++ /dev/null @@ -1,3 +0,0 @@ -CURRENT_THEME_ID=org.eclipse.ui.ide.systemDefault -eclipse.preferences.version=1 -showIntro=false diff --git a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs b/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs deleted file mode 100644 index 8ceca34..0000000 --- a/software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs +++ /dev/null @@ -1,7 +0,0 @@ -ColorsAndFontsPreferencePage.expandedCategories=Torg.eclipse.cdt.ui.presentation\tTorg.eclipse.cdt.ui.CEditor.presentation -ColorsAndFontsPreferencePage.selectedElement=Forg.eclipse.cdt.ui.editors.textfont -eclipse.preferences.version=1 -org.eclipse.cdt.ui.CPerspective_persp=\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n -org.eclipse.ui.commands=\n -org.eclipse.ui.ide.systemDefault.org.eclipse.cdt.ui.editors.textfont=1|Source Code Pro|10.0|0|GTK|1|; -perspectives=org.eclipse.cdt.ui.CPerspective diff --git a/software/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/37/refactorings.history b/software/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/37/refactorings.history deleted file mode 100644 index c82ab7c..0000000 --- a/software/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/37/refactorings.history +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/software/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/37/refactorings.index b/software/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/37/refactorings.index deleted file mode 100644 index e4eb0ce..0000000 --- a/software/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/37/refactorings.index +++ /dev/null @@ -1 +0,0 @@ -1599952443965 Delete 2 resources diff --git a/software/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml b/software/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml deleted file mode 100644 index 27eb404..0000000 --- a/software/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml +++ /dev/null @@ -1,7 +0,0 @@ - -
-
- - -
-
diff --git a/software/.metadata/.plugins/org.eclipse.search/dialog_settings.xml b/software/.metadata/.plugins/org.eclipse.search/dialog_settings.xml deleted file mode 100644 index 5138536..0000000 --- a/software/.metadata/.plugins/org.eclipse.search/dialog_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - -
-
- -
-
diff --git a/software/.metadata/.plugins/org.eclipse.ui.editors/dialog_settings.xml b/software/.metadata/.plugins/org.eclipse.ui.editors/dialog_settings.xml deleted file mode 100644 index 50f1edb..0000000 --- a/software/.metadata/.plugins/org.eclipse.ui.editors/dialog_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ - -
-
-
-
diff --git a/software/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/software/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml deleted file mode 100644 index 36e36c6..0000000 --- a/software/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ - -
-
-
-
diff --git a/software/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml b/software/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml deleted file mode 100644 index 0e91340..0000000 --- a/software/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml +++ /dev/null @@ -1,30 +0,0 @@ - -
-
- - - - - -
-
- - - - - - - - - - - - - - - - - - -
-
diff --git a/software/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml b/software/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml deleted file mode 100644 index 10a0f59..0000000 --- a/software/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml +++ /dev/null @@ -1,18 +0,0 @@ - -
-
- - -
-
- - - - -
-
- - - -
-
diff --git a/software/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml b/software/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml deleted file mode 100644 index a5057fe..0000000 --- a/software/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml +++ /dev/null @@ -1,430 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/software/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml b/software/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml deleted file mode 100644 index 332e913..0000000 --- a/software/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/software/.metadata/version.ini b/software/.metadata/version.ini deleted file mode 100644 index c51ff74..0000000 --- a/software/.metadata/version.ini +++ /dev/null @@ -1 +0,0 @@ -org.eclipse.core.runtime=1 \ No newline at end of file diff --git a/software/LED_Controller/.cproject b/software/LED_Controller/.cproject deleted file mode 100644 index 727f6ea..0000000 --- a/software/LED_Controller/.cproject +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/software/LED_Controller/.project b/software/LED_Controller/.project deleted file mode 100644 index b310456..0000000 --- a/software/LED_Controller/.project +++ /dev/null @@ -1,26 +0,0 @@ - - - LED_Controller - LED_Controller_bsp - microblaze_mcs - - LED_Controller_bsp - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/software/LED_Controller/Release/LED_Controller.elf b/software/LED_Controller/Release/LED_Controller.elf deleted file mode 100755 index 09655c9defeecf1bf8a03b6a00d8ec42dbde1633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51396 zcmd_T4}4X{wJ$#V{7C|wBnOBX74<-Z#x{lkX`3o-`4cphhzKD>rOgS+fkZ-*CIPXf zHA>W2QK_XZTHYnrXmjty+uWA6cul$SN?Y1Xe~;c;OZ#YFXlV_~d!=pKMn&_!-!(IP z?-LTVef8bBmdb9AI%@k) zM|JE}+5ORl>iL}u)p!0=P8ItObotKCe3kN7*;bevA2_OVr0o6~?c%R}Gqm4|a^r)? z>7&>^S<_YZYcciQYbq9>;;7n39M$>=eK#`FI+s4(H=}=UFniUsV)fO7j;bkC+1sNk z))7^`9fz3@S;H!3{Vez(`HzjP6#f-&dhKZ1=OEjIW$FKs5!KuChUGbN3i`YZeO`9Z zmgIpQXV_-BquP$L*v`2sNO`Z4w>Y<7%2>H8jNB|&2QLmzkIabKa)r75NVBeim@2+5 zB}=uyZz;ne^&P>7MjjDATE5a*=jW?c)*jWHb(u}G4wOSZhcij*Lb^tLobU3e-k4kV z#P^hHm3YlkGh%6K;|x`qw%f+9g^+jPtk`nbt4@3S=K^ZS<4%7B-TN+y`4GyUk^XSk z>ml{{>uKt_*CXo0>kWvjIu-7Vs3+mSdxAYU9E_>1c`ENo zb#~;*gCir~lC;XMNmJRsNsXwgJ~bR~choQDF)yMn?Neud5j;Mk4n$QSWJl3oYbdWB z`n-brUqSt^pnky2Z$#0i1EO1hlyPX=BVT-wm_lEjozXs+r)mcy?Bmj(yQ7Smq1Wld zuSE}_e6hOgb;J8gzMAp+0@zpr8Xa=vp>UsS!XZ$JFbKC(}( z>WiVB;FGAF2Wk$h!!?~JM{*7Z)MpDrYT7I8FC!zz(BDo*)$Wx052>_+s`tLbs&~V& zzL8L$a(*&+xmxvSUd7Hv}0@G0p~-=^ZFQUe;KyZXRpBiSKyyl z;LBIwqgUX=SKvcwr&6?&?c;k!q6b)4NWC~*f;9TcRMAl##JE6Ro5ytQmho(4m1z_Bih4jVw5_XC+sGB76J!iGh;7gtJj8Q34j1Zi&en14 z4X=(PNVASTZ?5WNKHL6WyPxRn9SNh3Lx+1QAGV9$xJH#3pNTKUmM0Du8ye*;kg
_H#rRMaQwPPa=clmW z={|??cSaoJ(1};ijSaSO@FcdW-JJK6}j;tcdYaA^wSRF;ECfpl8Q0wsEj28LTkv0 zpHZnC$Mm&7$UV>!B=dFX1h@@!u16LS{(x7`t!Ne}!YT(+lty+erLqd@F6mbWFF8 z_{jMA*4+3nEpMFj1fTyg9!(M4LdhG5iXTaXo@@iQhrb<2xBl;sB9;yB+T4KwNgG_+ zfoYs^_0mq;4m+gGORit6&w3|VpQ+xpx&6P~fcS{37awu5E2hm?E71pkBs#@&)jYOU z9ot0x339x)DuirDz36Kz=4=1kdWt66dd~Gd{f;;*v}M@mbUW&pJee`{4E>8aXZIQO zxe-;<9l$wc=54ET+Xs$=&VEc8D}fWP!kmb(9DUAF-96>Fj(0nugXwB}&ob3s7>q5R zHV7MMoAd(bs|Sx_oEuS3bYCL0CDZbqm3=C&J*x8V(ftzgLNhy{YX`>0wB3|{E875Y zE$Y2h)%4Kssu;dL&&l}N8o>1_rrTs?ZkOn)`w`+FHtV+2{_>9@mgh*i?SGobfzH$e z{;+n-oRDMBCee%Ium^=?C#sd|=80t$mZBl~vNke;e zp?xO;mOHrz^Pw;6x)pX{F0T8g;PEpK^luKVJa{$wd8f$xRrC^+o9^U_?bOT8nO7n{ z{$d?b5Bw)Kt^h2fV8ySqL?x?FDuL+DN3-io%g0$>fohLe=yf5x#oD!YmXS&`%J&3n}%v;%3 z@iRN#(D#ZJxdSJuD`RUw`an&0HRIUWRu-|b=8yNd=*lv#p1!)1^{CN(!pJ*|vD%JJ zEN{n&SlEse$>Yb6k4`_|2pb%g>|-Z;$+RK%SJ=TZm}74~`EZ|AXktR`#*3G;*+*i`d~k@b7dAqM_1^vnvxRa`ycwrk;=+JCpWZQp)|?M~fTW*^ExMmy!` ze)}tl6hcD|~4`_F2b-ngRu%-DDudF^flPTeCUJrM!!C{&GLVLZkwG!KVV#F zJK|>=a399>P0%M-=6zolnQT+eRc${;9ly^d6%q8Ig)_!*@W=lPWNPiCA)ePMaXt`LwBc(tz-pyvd{;LViT%bhdwC9*D7mH0l>QqsudW zcF2`=V4uu^ImeoTdzR|qJayM_zIuGPP(3$Xq)rSME9ceuYR0Pz)WTO;PjgPZutZhA zTB`1PwM@-;&1sK+PO0sTKa$kll+=CQ+quk7gSTCOG4fFaRQqK?5hy92f&JRN>fqNCz zyI__Yo;+FgPM%!TvlaJyBO~`>{uD0^W|znuE=R2|bo*pp@Owe^9mu?AP!)a$W8q-C zz`~QqRNk+SQFqqGXMmKwe}-`)_HFWpz*_@ezsz>& zgC|bW)d zjh!}4xLx}15ymX~Zj8@>Vl|lKC#K}$UM*jq%gm7HHFOX_eiIXDmNLjJ(*9hI{(? z>f5OE?4ykLEY&)wvbS_ZF#irAJzqWl8tckNx(IQFakytX`qOm%%<)u|_u;)SPU#qV zKdu+q(B}mDM)k|k9nV!xybS&ETxEtlLn%VsvEB1byI1;RoZ~z2;n6XA*u?08w4rC_ z2Ko`VW5+1vHk>D(ip=wIE3XdnE^v}#ld|!gE^7P8%$cfp=FE6un$gRj$9Ax?rbAZN zC|L)5ael<;#WL*A5$V6zP3urA`;Otc5Bs|9KBGzh#tO`k9fwSF`>(n=j&4WZ)05L_*m0ktZIkX zo+su?Ap7fM_`{X$(<2+a`$y@q&BTEBoaw}?+SbIBvBvk}QDfd(jCrXto+tEpPTLFd zY!&w58uT*tu+N^XuXl1T9n@_|9{<>D+i`T6wI~xBr_5M&NzTL(;5wN{>ia` zeOdbRAEFnjrwUapG`U0FH-I$>_-5AROG!i8Q61fc^Hna!dpy%ce0Jn4IMt~>JG=v@ zQmbB7yYD}?K)q{@D(!?%=bci!?>Sbg{vPE!k3r^{op>IHHMc@N9<}4yJ=W(#Z)^#W+ zDEiwvca6-FI*ZjepbMW>w--iWC)4xQc8q6V8;;|o%pI_Y*Xy-%txiNaPcD)5z^_HQ zZbY8;9F7(6o2)kt2(2@x%UqA36Rw9{kQWjk={QJkqd#CCLLI&=b?$^e@jMrO`H5)z zNZOO_>LrQIs7iaB_maHMtK#ra>9?bJmd@u=b><%J1zhVnelV`6QwaAA6Gn}{CBAtn zd7I6(L&xht;aZ8oZ)5KMYtg6j@`1wPk&f2GY{t|-FvOf63BdDluTLkfvv-A=d^*Jj*P_T1P)KaT5Wue0;DdvC%pT* zwZAdE_h{CZ}z~s`6D>sH)Y}0`ld}ywVN9fRf(-_E!71z$a87H+;r9E z>XtUi_R(6~s@qzHxD9(f7Ncx&#@jnF(NiVpQG|cVdB~L654Z;>>wU}P?eM&%kpFua zQlUy+OzYzS@H9s|V86vjz{qs_56`5v&(a(*986(PkY&>u_-kdp)9{O^E2usoTD+c- zZgqh^PC>zJ_kTnEx(y9Yt*x^+)z`E%t!t?MctWX~mbSuzRodimAVf*?9Y9zU4j`6P z@ZXe+XA%FdhvyPM;^F1QUr^5W?H$WHmIX6EEP`$)RV~0@$N4MNt8c7t^E5mXfUq2A zS;zKe%Whbi+MvAtbbt!4nG$jhCZ7W6!wlP+&mSDZ?_45a-KM153p4-v< zEV?fy$BCD3`f76EP^Dg|O?W9_CEz5$wFZwHyw>0i25&cbCmhNV8*BjZBEZvzK4j>_2A&0E z1FH))e+ZCxn!%%hG2q#N!JAl945{k@7Xa#@V|Na|Awv$6A0<0U&)!M?Jks3E;8Ot- zNqdjwONdxdXd>BZK)%5X4PIpM`35fo^oc#;ils1KFewBxCm9pbn*^T@=qvQ+zo-z3 zUKwE=J~sR|Bhbtv&l%{w_!@hh^76-wKYBj+bclwQAjxJg17tI=0L%oeGz0m%GvlOG3+0`COWnzNeVk41P9k`z84 zP=o+d=n4bN4XiWyoq)7pHy|z8WAeKIS!uVydkntM;JpUlZ}2{Y_XAStqky_cpG1lS z?Vw8;G8D9%3bs+pJfwI9UjgWg($`#nu|v~eWVRt415VS}KS-y4@N_*82Mo57(ts4j zwgHlJD9UO<}A2goo#1W5kF zfHdKV!H*jFf`J2o`jRw+6fa4`E+uraxc~#|OHvV1zV`W5KhtP-xU1Kuw`?(juhD#h#7tQ{}LzLK?>{s{#jTs+P+P@1pTr zSMT$=n1!ep^(QO^q_9c@*BW}Afo*^caN5HTvJH^Eza7xp$EfKv_zpng>=?|a)x>Ev zdwVw^>!a<=XTvbx-!YiqXYvmL()bqugXL_AA*2=n!dw+xNlG?SivXv)lsrQzB4sss zN|E{yV3|v)G?ZFW`DcZ=FRD6zoHcSB_(9Y-BLgdq+5);09bPNNBV>KO4emb1=c0k_JbO2I0I-2F_X!6m~>?3qAN2)GBI+TuO{(gfW0Hj|1 zhJF~3@?QW)5p}r4A`NA2Dv4 zY&TNc#T+Pt?I{$s07gx#45#9@KI4J7fC9WZ(t!Hl`1xPsezS%R4NWgzt#e>qtqF^!QjmX z-wH^%9e^^i1!Vi|F?f%`djUDwJOs$LIBf7241OGt15aqWRi3Hfv!XoSl@OuXB<=VV zog8CwNQR9(k6Og!Gjb6vVNy>^8<>1hiZwHNpD=7glA5#wa%}BjmPALV$=P9Yb^$Ub z_mBfYfapXD&zJ+K$e{j$U0(x^mU%Wivfe*)mK?2pWjBgl}K&_Y#`}A znZNHs^4%cq2BZ;t0BLwPARDI#kjnJ}vcf(TAJaq-f4b!!ZQNYr`-guP^E{ zEh!CxH6^IybF*%=r(u{Af4U^NDB`GviA-E(vCrc zp8;gKAwV|Hu%Vv?q^{A+p-G$#GaV^X<^!_k5>QhT7H}4d z8CV2JdO0AYJr2kTJI8UV&v9JOBRGOz21=XZ;0R898z4E`0W~Mb@>!s8ET?I9EZ^;N zaP%feuS@AOltZL6QlryI`ONvjUu@155E7?2nF7-wsw)OLP4NgB2KLW^dLx4VIzL>_!L!eO^Dn*=1jTaoO zG>&{;X=(u}v;mO4g-Y^bV3njtNvB8cY>M?zY3oPEdJk}h4wWZP9}@2eO3@Nd`2xB2wXzm)t}JOXT}s%~vfU@>}(wIN>ZgB>zsWs-e34oFYe8N3Zp z0vC`i)?x4+fVw4^`ZRKO0&)=A4ak1k1;{B>Hy|bS0P-$uA0V$f`vJ*+08kHWeMs^0 z+7HMQhX6T`IBf7EfGl~`;4c_>3{XG%8bFGZ%#(nWeFl*6q+;NRGgz{a!mf=#woA!1 zltMr+w!Q}*ApkNu`S3a)kb1Gx(-*}C=fKQMRT&_!vm6Y_XQOwm!5aYWEQk4wX4>0l z@{a&=kRAdICaCRMrexsF#pqNFNO{Q=R!=azDYtPU}8$lstOB4gr;`s(I0iu3fvRy=xwR$M;Hih4K1wGAFVh6R*%r;$qOTY=MpZGgl( z0HtjJX~7;t?*Y{M0g8TvV^}~9pTi3wO8w)2-`nRd{QmDOD2=@ex<~v|@mBTPRjMj) zLkf1OH2Bw$y`=-Yv@rhAW7kOCW*B3np|e`yPL9B1CR~dX>fKn^6duH^PPUASoa{HZdx`nLvJ4-wcHO# zjst+~@cjlq0!Zyo1G3`}19I+p*5qU6BIQB`rWqJ9Flu0yfiXZ1bftjMgr)@5LP?L> zkl;oUw|mso%&uu_TwlK-Y0n2XD7Dtl^Y&C62trzcgIyG|l>&dTf1(V#E4Z;j|3&Hs zZnrS|Dsb1R^x}HRLDD_0MCx-mo%Wgd8-RQ93pUPP{N=ulZK&sQq&+Sm>Q*!(xh{qz z?z-SsiE;L3%&u$Nl$hOCziIZ0mZsYhHEpf4*Eesd*2Yz}C0g5Nw>GVByS=(4F}rL@ zN!8+}#zScLA*e$ks6!#BLm{+z-dq)E zzZGnu&2!$X0(UKvWU&g|eHBsxhDzX}r;!YYsCtU?ulSqFKPoLWL5E5(EwvhY1k=Jl zN39dnf+t@`_9V7(@Yi2L68@URzzP0_1?jIq3pj%>y$Ce&OXP&Eb*8`%;ZQdIrZ`vO zuT+xC6ipBp?h7q+E`dfFA3*8QBIiLZJ7YB^EOzeJ!ZTJ8Eiq_X#vjPM#GsLkA?99Z z&}hb!%)Q>ASsAG*KuZmpo$(-Zml||>#!VA}e%PR~j1e>ox)fCkf z?rkTS>gxsH-yW2Q74qK|>k0u*zEvnwD{v>aI0tB%_zPA2Db& zV-L}f8Z;~803}x$G+RY}Ks@fOK@I7V&;}q|CuMP}ytMpLlQ_iiRWt38ZJB>mpdjTtJ z7yk6_(0xun@^zeaTBeM5ljnYehB6YY`qKtY%gAITJRk)FIgyN?u!0B0uYsIs#tD{v z$eD_|13CE_^N2od(Bh2cAcuB3ScpJwNyZPE`x)svft=EeA2Rn5lUtTCo030ka#v(5 zB=at#MtR1EnEQEyR%U#WN`AqhYcn3BsNDvQXI##*k2&8#nLti$#x$C+$HZ7$#%bpM zokU>j^0y%-QMae)XhO7R>3wL@C4w z%%uNcL{Sr(k*~AZQ_cpECp#m^a6amA?B_PL8ECZYp~e(8r}I%J7lJh96+s#6n~7$p zGWTvIkK&xVheF~+IdPfVj8aZDnXkYJHCX#(=R$Jb>#&+)Y+Je&d0%y_x|dab0wi74 zeJuSIqEb~SWlx0Ox~fkTEh8#bJwWD0pepMd&@)g)92ci;s4$>)~(z_{}Q| zJNEz61J@&XnwjGoHbgQZU*NxG;JWKDBTRs*@Bj+430g_%VY-+s*JmVGt=T6 zobxP>-*+>Eb2_-gA!bbeEF#5OH=p5 z>3bYT_X2F9dIIHsk8>J5?(E^U^?9HdeuHd(M@bw;FU(?R+DmkZ=%1L|MTs1|E?h+P zaf+EsRI2_G)w+r3)69M1&p>N|s_eV*CyZZfzyn`r8S~zNO?kOxj!e*iC;V8q2 zI>YeWOsR90IPY1MnE9OMW3B%m@EneG&K1s=fIDk)IL-m1znn_#>^yOHvQqETN>O04 zQYVs?a_HY`t<-d_)U~J~N0h1-rJU6{4^gFRhoOU6Zm#nK;QPI1BGt=Vi)gQHZM5UWiYcbrF!71g>k(Ze~rOZs8Qf4MkDKnF&l$ps> z%FN^`W#*_UWxAPC-iBH;IHioC*JYY1CDWKvW|}D_4Z@T%(@ZHfYNwRxW=eSqg3`^D z@`ETJ4wc|RDP^XaQfjm~(@ZHZ5>rbulc$uKW=g4Z%QBOvl$ps> z%FN^`WoGh}GBbHfnQ5k!KNX#8GtHDz$5>mYnNl(WIi<`rQ%YV+IHkmBD70fFQNYgmi zF<&l?r2*b4ULaSW4+rS}X}GK|3p@v^y6}&{c{%0Q=0Bo_yHGAWh(8w~<09sAd$bJP zR|hWcMUhLGi(|U;YgU-)$OW3^xyd*WB^c_L${aV-VVbdoh@(xHIrm|hb_(ht+vVaX*$?rGKc=8 z;PZh)@(;+d&vB?Px4AWd{99M@K9RfwxJce7lD`gAOa3R3^b6n@h~%#b4yh&d_RqAw zgQ(|sU|9kiv?qQhQYQl!sXr5`*8tU0kBgKV;9Ba>t<+7Fnu^sj9LI2O0n5WUwbaxA z+wb$hMQW-%X#Q8A+Uf~`yHR8ixSGL$oNI+^y0aWq zr!k=Cb|}I1>TAHjQ&-(6Ro?QZBu~L&tCzLu?ssN6IEuy^RW-m{ThEC zadBgd@o+@f zbWrjOfg^+!*c?2!qMsNFu}koapU9%(+D;XuiysB;Qn?T0%Zy6B%HoJ5usIh79Tp2= zl63tf{6G>!>Y^7)(G8&KqS;dPi^OHZby1Mjo&pX{-k{Cb2F2qP#a(fiM(~!KEACnm z_W{r@m4V~hAP0_*0l#2~W_%#X!6UaAsyQDFK8HM~B6cBjJ|q=A49?i4tY(4WUk82> z!-BgI50kw#C?WA%WL!K5g2Y829SO$8G$e4$a&}Y39a>XpS$Vlq??vA2sQ3yQR_>t7 zDnPnI6usj?6#E>|D>(>!f@8qe? z?{gl$ghBgmi{~?PMZ4RRwD{LV{C{`FofUCYC!^qHPCJ|E zV!e_=O*er26Iay5AvVx`plMMT%j2zH;t#UmB_X!NN#I)3O9fBo(#v$`YjnajAw58W zLh)_Lx&l$79dV6_-vyc$e~pO$1#m5HzKBc3qj+e#j^Zk`ro*7z3i4-MQ57QU6QF5P z6(Z^@z+)V1oJtY(E8@&_%)#E;?GI(M&KyUQQrA+NUkd^-i>ny zvYvK}|5%FebBq62iVv{(WzH|y3@__u*a6C$AP>7mUzVbmVGf~denpDTCoUt|X~Ay+ z4pBK2<%FdJQq)$E7qi1jFLA<*Jx)ios6d$h`i3hi7=94=3tH5Fp{Q(6)bBxl$Q6|> zqNZe9Q5T6Q&P23U7l+xmmjhQ<>t|yex-mCnjsFNSGJ}h#f*;X$YrY5yRzD)MFvsIW z?=bM$>S}#g`z>ZV>PlSH1B#b%b62|ujqZP{b_O;409S*6UIW3x2G^@XdW~ce>NV>@ zA-yaL1t)Lj+P=-*^jBqc@1yLGE)`MYKY1u_|Ji z?5c=H-Bl5dz7wk=I{3$1716ows)$y@T@}%&yDFklcU45Af1_0qDssM65mqLvA}MdZ zDk8VAA;;mgj@#@SFn&(QkUd3i(Lyqe>;P@bExg`^q~q`97(3N@j+D(#ArO`IRg%V*et-@2<-yudR*1brGitrOq}+> zk6o*UczF9)?+^%uz6^1J#~L9q9BRYg6z3lNO_e_nu%2*;jbV39IJ|9f);MgKI-FmE z0pCad#M>dqS;J!g2GYbY2}%J!28!JiKV>;=cgBJFChs5507M=mUrP;=&T4R-CfB_V zB{$;)*EAG~e3M-FR%@>G2Z)uhOgI>th4$u^*}3NZ;Kapu0VrlqLWV=mg%7Y?IJh+j zkoyn=Dl)-!=}gSr{2MOtTWl&7k!M|MuB_%dYOZ-^cY@uEqBo)F3t{lvs57v#0d?8k zC)<%ukv|V11u~mDbqW5sUQL4*&PIne_uw3a&whY>?bVGen}!*I_UcATxdbTub&Lky z3!7Z8{sBqtRo7qtlT4NLUO1RWe=*3M<@7AvQsVR1RI0I>@{zHP{<;zF2&f-={+bOI z|7_(e^cCkOP95W9jQtzVZA+PP?*0v@VI4ExYX64Qz6NZvf5W-!gObGW3*Qa3_5Ka# zp}$8m9Qq3WrZ~^yZz}(czkefe^3TYY{TqQ_{~eNcrV{uK3%dI^0x$gsPAb z%Vhm8xX8I*7nJqC;9}Wggp#uU7c4Ponymi?ml!l6>wm%P3>ua7zu@%-&64%MV5vc~ zW&JO>)S%O4{V(`ogT`e2FStxpvg?1rGK1>%zu*l9)$4!3wljD&PwkDEU-- z-0b=ZufhXpbi3){O6Tv9C%b;aHyd^J{5E`xLG}DLe5*nA{5HJSpn85A{)j>K{5Jei zgX;NhxXPerejAQE??tWYk?;oRG^_tM!Z%zeX|@uVXu|c^)^%K6$p!jL&5KWf( zZFr-@$NaMECwzx9G04D(;%}l;sjlxLx?uyTkW6 zdoiccanfm-WPTgI-=KPa8~(IG_53#cfE2X5e!>rmU+u1+@Iww)%k8e8@WTexyMDqu zonJ#myXznHrUDB{jOd`8nh}?apKsOo8aRYIAJJ&0q{(k@Axl{SjcPjet; z5=&0TX5G~(Q4HyUTs3LZ2SJ3Fr>S7ZHIuHLv~()e$^@N>@CDA55eJEsup*wy41~EU zhdJ$psm`QHEJv=1>8=nyRGn0yJ`~YXuZ&Rd1*kJp;EW88TgTGqt1sS z^WhU1?=xVE^M68p$5}d+x?$)1(y6myce-CIs+p{n>sG%ngPxB=pr=_MhpmrOtdCQ* zkJGe|CwM-d==brYWFJRNU12s)x?v1cYy4WHxDYvP46OfYYq0-cTQm8bmPlc_DZZ9K zd*NsKZA%1zW_jpX4fCJk0>9Pi$yR4rt23?D_*FLR7IfeO^d+=N_{zxAsWFLRYrZ(t z8ZQVJ#W!@+3%5FbkR9wr3+l_D~krZ#4C#%?@OIIQ`v9 zB4HX3H!LnJFzvKJ`ck%Sr;FHr>>RrNE}n!WnwZ&W+~hj+NXf2=a%#R~Th*VPG{^8nX?WXQaqw<0=m! z>$`lxi@v>o545ESnCb1cBJK#784HoA_l}Ac2n%In`(#M zG(GH2(8KOKH`eM#u@^%BNNc*{)bTu@mF#&Nea7>QKljS*8*t9sLw#P;b|-txI_aEi zlXp>?;MdlRl8MQ>PCAE6Mw5t-3+?N>uAX!8KhI^>XN14K$Dh4iA;YhK_HvGT(ry0_ z7-42Ge!Xq{Vm9`U%oO~i;$L`~^g`@Ik@GZ&zoYrB@uDW|H~2rVFOHglzQw%9?MaxB zGtzz2Z;ngzapGnG2j=kRz!;?L$tR^u#|&HnScKCa*mZ&OyeZJ-k3d+j%>>l12bQ|| z+<;8l4xBug-aYaMq;z?{K1f=p$=?nYRi#J3ZrH6LGx;K6ql zc+dtO+Fow@(tOyzlcq@5-i~I&-cRngbJ3tF&b?$JT(6g5g3}E zPwV}Bb--<#kUtk^K;;5xem;jz;(vo&mha0~T0YXq$D3HfqlQn%<*%TImdD%FJ!CeA z`#LZZWBdU8Z1el?W4xx?*3{HcQ&(Nz=>Ng^+3PmfH`LBJx*piZERVxbS%!|z}j;%^GlXu=#>V`#COYIM{SK!s*rj~O4TD$-K-Im0L z`d0jQyZvo-wYjmienVrTHU>YmsM@B@qY8}mYwWFcO)YIPwuV`ygV>tO8 zdwsde`x$!Iob?S&)otTBVhLWAzC&s4sdT05ty2Bl_oF z#qAY-XI$p~y1|w?RfR?7eecT6FbeOmE^Xus;WY_1SV>|_eN6)U;8xVPt*Xc85@5s@ z>kiMt^7>5(nse#CFw@>$+St6gZE-_W&BoG?yXN1pQZ206xG1r{sU@*0(ZU*4eg=);GlD4|G?H>#7?Y6AkLR>ee>6xrKz5>KX)e zt8u=x&r*C(!SircNquWgOQJ2YxFLZUr}V|u4GoK`Yc{S-tXHcWArxOmsP(nm(xye# zt%-%Twa}?mc{(J;e0fWCW9z1RDq=o{;Hwkw<>NOAtOu019`6jp&XtMkTIrTXM%DpuBdLQZ@a^oXlOTX zq1PG>aXAFA2xAfqTl_7=7E4yOeDSK4+NZ^I>FQRfb)$Ud0)1}%1`07om6w6h?WiW& zZG%~Ft~8^fj}ty*fUVk6qviTcZ78VmG1{_L7QLg&nwmClZq_ld=nj7@iDRjsNY}yd z1`xWTrz^cckN8Mhpl%zMU%q+MI`kK>jChJ=n0rHY>qe#f7nDrmYFpmavZ=a3xSDDc ziuIT#^@O3eMqEYM*Q{|~CSy(KCktMgKwOL-AK4%4s~b4HEKl6NxM?#R0OI+}6~5w2 zTbFEYu5UqGdi5;Az|hnxrg+4qO$_5v&e3u1tIFfQehigFL}_)y`rDgY{1w75>78C_ ze`ESI!-&?{bUVh44QL`WATgqwU2i2Dn%o9%uWV^U8*N@Uwud=ttwGoE2LW0XWsK}( zp>_bEca+p{PNObu5_zuSXpf~Bp52a|6x${Od`3(2`fzJTQ?rk_stqUw zFk6vmslkjuMm@z6xF~o&!r0{xU?ZL`YG_!8>y@fpzPX{njTN1*D%Vu=DrB&CWC~W( zv}qH*A;j54p_xrwSC6S>($6g-7?x*yaw?VrEAa%?$0v$KTpQrkCN*m~YeZwT&H3&@@Z&~T&nYaJ`?l^tYHG~=ko`^@QQnvFq@W9jzi2<&eKSh{_)nmFb0DAPb*&}EYMZua1dVeL5iy$pUU!ye<&`5H(J zCx3pr2q%AKnm;dXkGIOVuc_Hr%~-Azr+qbyIA7$luU!!zk1qMEH`_DWZSWoAK$2M}@7?Vd zN7CwyJf?ZS&U>1V@hzYu&l{ZVIk;PZTvKw0GB!Sr8)qfnC0 zTv@lzkqSpVok_RPl`2QkZT+M9?Q^Hzark$PqTATUV@#^LK6 zMYqqp4!s#GeK_s2^3#iyW1oL@znSb8`#h{?6hHeDbvQYaTlRV9;R&C`^T^RU#Yf4q zx|WPXFCJBg<0?N1S6*8i>TZN6D#0KF2EN?f1zcod@YW8%CAe^&bkdgTLN3dM@$*8hY9^D~qBWLd7f94JthNN_=I*shhgDk$s8t)e3aBka zPw`WF^c*3FX20i{&rjdMG5qpfzfST4cc*m{J0?^%PM_ykhM(DUR0RRQv?rcpf}hz7 zDtOM5RzacvZkasM6`p9QBC)`EQg)^jXS1}Ps8OWf7KkFnV zo0q#?&CDrr1%q~{rP&$?BRG8qk;JKNKoz?2McNo_xgaAvm}`&GC8;t${zi`y@D6uqQr%tU>1$tU z)>WkI6Ughnzi#F?>k9b|wqrVpADvfeI3bANMk~}w*2KdrQ^7J_Ql{dlTfD+6Uf~sY zy~^UBkTPpn{8u{3GE=3VH7s+jPU;GEmAXu&SEkY{Q|Xndv}FkWj^p&*Z#whm!yYybpFKY%V%;gxZXY)9@MoQQ6Mew;zI`8a?+;s6vhQN}%a zZ*wN`U7B|L++0lqDhJ!G94DiIkn<+LG0fkA6UOuc4C-VATv<4M0pT%L47iLH9;0gk zKiNhON3F6-5c)kj2;8p(^R=VIquTz}{h(?`ttNv#G-Cw~){K6STBdd+$Z;Mejv@Oz zO6-u*t9txFkLq+%_P`H$_`1Lx;;T`l>zYXB#wfJM1`nPjCv?*wXP zSguU99egwK(^9*f(%jNn!q56_#&(-wOY+g0sohVa_Wr4reF8^XgVDjCPo2`VGXz#% zE{@5yGMO*GmZDY@#Bn0@_+7L%Nv3MqzwS$WGS_c)ACi#VXce(k=b6fw#`1Jvo{ zZh$VGJOpq=C-K)kbQzffHGl|LdSxoSGOky*fr%Wx2|i^}%mjoUgAQ>S2TE~1k`?PC zS@Av+%D9K$+_#vN7;|@_>>iwOLO;Ox^OHDojk#W#3a^Z7ZY>ze@fVwG#rkZs;(a7Y zb`QU~L!kP{6*86Jgkc2Q+!|hLx-^wwza(qe$S+88H33EWdJ-@rse;AZB-h{OUUAn6 z5mUyexGn1=jnTkXmX8af+{172TQu<7ZdEFVAl?O_%T)9usUyKP2o!vDos4VZ0AJS0 zet;k8B>uX`e58B^#DTIBABpHTO{y^+z}D~M>IVn)@R5MI#~99txtU0e-TbTvK|#=8l&mdjk23qMHb+B`x%UtCQP#fknq9Uxbds|kuVwH#orrV?;^ z3tn%^znb?DtYFj#P=`9;F;8fPC&_=uupdSHq`2!m26~4SUq#S~GlXH}a@S{3P$=JL zx~<1Yvi12$R&5{2*6$-hvU~X5*ahn7A(O3&U?Ny6$(mY#c1f-#=#r#61qOz%ONnbd zM%QxY`fKa~{`P95lb{Cy3yo?FUyYh^+#0*zc8wjnMgkTZzedeCZjJ2VuyHzod*mYp zYgPd0UX=6%K<8F?xk<9$CuP?#_jaAcU-t+hh1$f+|9_~NlfYV>w3(3WEq-q^KaLaL zwmz~&(0eV3rFQC)0=d%Sm%{wt8Y#$1!|4;qTz->|0^Qss*?%i& z@};iZ2v}`UeOf*e1%5pS>7ihiSIWH_G4`LuiCL$YTh4Mk*uL{|GHM99V&-pe<}btP zYh;h)wrn#vw&{`rxen%+!u$tt`lNUySBk>nZ|*_heksf^#0e?XUynAccO%)Qsr>+l zbrOHwLzk&wnJ%0N&VB&R=vGdZ_u-@?2)RYUUpez%z=_I-0rHUTvqqi&2!fYKnqdn< zG>@o@2PGAAar!~;sUZv^sCd|Y6G4T=Q5+r6f=5uL3hZ`qUDG}npCI}BT^z5c;b_BK z7(9Y_io|29i$?^{&lP}tyw-xF(8cjKR}zk&0mV@|O91$_Wu;eHe6miMzd`xVnMVrZ zQ*izxD33-xN>E+kAxH)B**X6aY0H|$xl;{0zaa|1eCCRfkiU$ zhxR;+d@fB@0uLbnyTI*X^LfE2GWo|w<-Y`+zj$T!eREX)BWe2mQY*Ckc=j9M{8=xpUqpTm z-jg3y4l?}mBEainx_v3{BH*Q2dQpYAzkf15-h+I!|92yez-{|R5nmT!Napt%dEi^U>JH?`b9MVNUOx%^7T`L5GF1m~Zq+yq ze%AjOa4xpgs`u+#(+R5RvjlqG>XV1xb&#k2Cr$ob;9k5;Rv!S)-)}>;Qr~jm zp1$dd->dMq2gfTrezLvlk?-LX)W^y1ix2;J8^w6riF__yT74b`ev?n%eZaX3gX0VR zdkA>P3?Mk7xPJ2eQ|hDjji`S|zF)s%z;E`+`###+?oq_oo#iV6p1x`7cdYMfD}S>3 z(J1^?;d?|45r`m)3DQMi4!1)Ba z9C5(%8-RQM&rmJEclgS;18=8r9OVD~D1GlmeleyA$8Zf{K0hH)81u%{UBEqmMbzWK zccH&?%1Zu!0^Z@P?^{XyzZ>};aQd^`)UReYHMh;)wC-wtlNEcRXA_S1&ZODa?CzaL zVmwxgl6N?pRMi%Ft+A^0_Nv6znuNUZ;}YxbYdtQ-|BcnZMmyBH4zC6^7NF*;#pO4y ztSVc&s=TTSScwm-O|;n8D%&E{_c*fnNkH)O3zPf%>Gv4@so;p!g%a^8no9pGR z4*i}}9bRRr(%xTX++T&YBfQC1mB8CW$=ufe)$=1((t9k4J~*l z$^RCRZ+m}LRrw8ztF$Ni4#v5>NiS_cHmxzjO`zCzXlar>w2@CMyhQ*tv`%xYlJoTY zHDkOJqTd|j8Lc2Zcxea<8_DR7l6EeWL}{{ZCxTM~FvlW$nM-B7}rO(6Q~ zs2jsbc@3?~KM1?;Y5PLroKH$au6|+0C(_pgOr(lm5F{HgbmB#D20z0FLj&GDwu2Nz z`Pxs98hjTxfo8I0Nd=0?n(Ky^dns`hRt2qhY-+1s2iVr4VVzCsi&AR=UKUQYsRD~8 zU8G#9E81i9dq@?u;Z0aoAQlx!V-(1ktqSBSq6&0}fF87LF321^H3ooAtP120hXQKL z*TxEJ6YDl_sKPH6By76Aaeb3bSFc-#Ms_j0*SrB8-V}nBHkq6u7cH9wuX7&qb`NZ< zka;zx5OQ!%>)qSC(^~Z|&@mm6rzgzkTxl%61)y6#J`>=aWGp^DWV3uRr1y`*S8w=u z`@I5ZA5K0+vInMlax~$umB)J{-ha$Dc?6bkvyYE+*fTg|WH5*2`vh(vI`McEr`3;hNAhu* z#vZl|pS@Ul`MH=^;wMCvXY2uvglFxrwK0Z^h@+=?sQrW}G{%0Q_=jtNQW+KlP z`KF)ms`2>_`pO_F@>*cCJ*>R%gJ9FlOSv9PVCG(exXpXfmnJ>4O{pjKqdcN6-$`GZ z^aFPy{sK(t!^XrPfKqm$q4(Y`zkX>joyYt)aatXi+5a%^b;pnw0h6CE_6SxGeg3ma zeml?4clPu6a1=YWIcy%GuNpP@RrIF`vJXwY2YHmo{tA-B9)KLh=x{%`g99j5-ejcB REs5}5@Vs6a6~xE)zW|k~!6^U$ diff --git a/software/LED_Controller/Release/makefile b/software/LED_Controller/Release/makefile deleted file mode 100644 index 55f5fc7..0000000 --- a/software/LED_Controller/Release/makefile +++ /dev/null @@ -1,65 +0,0 @@ -################################################################################ -# Automatically-generated file. Do not edit! -################################################################################ - --include ../makefile.init - -RM := rm -rf - -# All of the sources participating in the build are defined here --include sources.mk --include src/subdir.mk --include subdir.mk --include objects.mk - -ifneq ($(MAKECMDGOALS),clean) -ifneq ($(strip $(C_DEPS)),) --include $(C_DEPS) -endif -ifneq ($(strip $(S_UPPER_DEPS)),) --include $(S_UPPER_DEPS) -endif -endif - --include ../makefile.defs - -# Add inputs and outputs from these tool invocations to the build variables -ELFSIZE += \ - -ELFCHECK += \ - - -# All Target -all: LED_Controller.elf secondary-outputs - -# Tool invocations -LED_Controller.elf: $(OBJS) ../src/lscript.ld $(USER_OBJS) - @echo 'Building target: $@' - @echo 'Invoking: MicroBlaze gcc linker' - mb-gcc -Wl,-T -Wl,../src/lscript.ld -L../../LED_Controller_bsp/microblaze_mcs/lib -mlittle-endian -mcpu=v8.40.a -mxl-soft-mul -Wl,--no-relax -Wl,--gc-sections -o "LED_Controller.elf" $(OBJS) $(USER_OBJS) $(LIBS) - @echo 'Finished building target: $@' - @echo ' ' - -LED_Controller.elf.size: LED_Controller.elf - @echo 'Invoking: MicroBlaze Print Size' - mb-size LED_Controller.elf |tee "LED_Controller.elf.size" - @echo 'Finished building: $@' - @echo ' ' - -LED_Controller.elf.elfcheck: LED_Controller.elf - @echo 'Invoking: Xilinx ELF Check' - elfcheck LED_Controller.elf -hw ../../micro_test/system.xml -pe microblaze_mcs |tee "LED_Controller.elf.elfcheck" - @echo 'Finished building: $@' - @echo ' ' - -# Other Targets -clean: - -$(RM) $(OBJS)$(C_DEPS)$(EXECUTABLES)$(ELFSIZE)$(ELFCHECK)$(S_UPPER_DEPS) LED_Controller.elf - -@echo ' ' - -secondary-outputs: $(ELFSIZE) $(ELFCHECK) - -.PHONY: all clean dependents -.SECONDARY: - --include ../makefile.targets diff --git a/software/LED_Controller/Release/objects.mk b/software/LED_Controller/Release/objects.mk deleted file mode 100644 index dca16ac..0000000 --- a/software/LED_Controller/Release/objects.mk +++ /dev/null @@ -1,8 +0,0 @@ -################################################################################ -# Automatically-generated file. Do not edit! -################################################################################ - -USER_OBJS := - -LIBS := -Wl,--start-group,-lxil,-lgcc,-lc,--end-group - diff --git a/software/LED_Controller/Release/sources.mk b/software/LED_Controller/Release/sources.mk deleted file mode 100644 index a745eb3..0000000 --- a/software/LED_Controller/Release/sources.mk +++ /dev/null @@ -1,21 +0,0 @@ -################################################################################ -# Automatically-generated file. Do not edit! -################################################################################ - -O_SRCS := -C_SRCS := -LD_SRCS := -S_UPPER_SRCS := -S_SRCS := -OBJ_SRCS := -OBJS := -C_DEPS := -EXECUTABLES := -ELFSIZE := -ELFCHECK := -S_UPPER_DEPS := - -# Every subdirectory with source files must be described here -SUBDIRS := \ -src \ - diff --git a/software/LED_Controller/Release/src/LEDBlinker.d b/software/LED_Controller/Release/src/LEDBlinker.d deleted file mode 100644 index 07bb4a7..0000000 --- a/software/LED_Controller/Release/src/LEDBlinker.d +++ /dev/null @@ -1,25 +0,0 @@ -src/LEDBlinker.d: ../src/LEDBlinker.c \ - ../../LED_Controller_bsp/microblaze_mcs/include/xparameters.h \ - ../../LED_Controller_bsp/microblaze_mcs/include/xiomodule.h \ - ../../LED_Controller_bsp/microblaze_mcs/include/xbasic_types.h \ - ../../LED_Controller_bsp/microblaze_mcs/include/xparameters.h \ - ../../LED_Controller_bsp/microblaze_mcs/include/xstatus.h \ - ../../LED_Controller_bsp/microblaze_mcs/include/xiomodule_l.h \ - ../../LED_Controller_bsp/microblaze_mcs/include/xiomodule_io.h \ - ../../LED_Controller_bsp/microblaze_mcs/include/xil_io.h \ - ../../LED_Controller_bsp/microblaze_mcs/include/xil_types.h \ - ../../LED_Controller_bsp/microblaze_mcs/include/mb_interface.h \ - ../../LED_Controller_bsp/microblaze_mcs/include/xil_printf.h \ - ../../LED_Controller_bsp/microblaze_mcs/include/xio.h -../../LED_Controller_bsp/microblaze_mcs/include/xparameters.h: -../../LED_Controller_bsp/microblaze_mcs/include/xiomodule.h: -../../LED_Controller_bsp/microblaze_mcs/include/xbasic_types.h: -../../LED_Controller_bsp/microblaze_mcs/include/xparameters.h: -../../LED_Controller_bsp/microblaze_mcs/include/xstatus.h: -../../LED_Controller_bsp/microblaze_mcs/include/xiomodule_l.h: -../../LED_Controller_bsp/microblaze_mcs/include/xiomodule_io.h: -../../LED_Controller_bsp/microblaze_mcs/include/xil_io.h: -../../LED_Controller_bsp/microblaze_mcs/include/xil_types.h: -../../LED_Controller_bsp/microblaze_mcs/include/mb_interface.h: -../../LED_Controller_bsp/microblaze_mcs/include/xil_printf.h: -../../LED_Controller_bsp/microblaze_mcs/include/xio.h: diff --git a/software/LED_Controller/Release/src/LEDBlinker.o b/software/LED_Controller/Release/src/LEDBlinker.o deleted file mode 100644 index ce02cc9ca2f932eccf847bb8fd4f7483c7106778..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11584 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 y7pS#z#LLu6qezB;`ByvE3q -#include - -XIOModule gpo; - -Xint8 x = 0; -Xint8 y = 0; -Xint8 scroll = 0; - -Xint8 reversed = 0; -Xint8 foreground = 0b111; -Xint8 background = 0; - -Xint16 properties = 0; - -void commit() { - XIOModule_DiscreteSet(&gpo, 3, 1); - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void calculate_properties() { - if (reversed) { - properties = ((foreground << 4) + background) << 8; - } else { - properties = ((background << 4) + foreground) << 8; - } -} - -void set_foreground(Xint8 color) { - foreground = color; - - calculate_properties(); -} - -void set_background(Xint8 color) { - background = color; - - calculate_properties(); -} - -void reverse(u8 enable) { - reversed = enable; - - calculate_properties(); -} - -void clear_screen() { - reverse(0); - set_foreground(0b111); - set_background(0); - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, 0); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int x; - int y; - for (y = 0; y < (45+2); ++y) { - Xint16 temp = (y << 8); - for (x = 0; x < (80+24); ++x) { - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - } - } - - XIOModule_DiscreteClear(&gpo, 3, 1); - - x = 0; - y = 0; - scroll = 0; - XIOModule_DiscreteWrite(&gpo, 4, scroll); -} - -void clear_eol() { - reverse(0); - Xint16 temp = (y << 8); - - XIOModule_DiscreteWrite(&gpo, 1, 0); - XIOModule_DiscreteWrite(&gpo, 2, temp + x); - XIOModule_DiscreteSet(&gpo, 3, 1); - - int i; - for (i = x; i < (80+24); ++i) { - XIOModule_DiscreteWrite(&gpo, 2, temp + i); - } - - XIOModule_DiscreteClear(&gpo, 3, 1); -} - -void write(u8 c) { - XIOModule_DiscreteWrite(&gpo, 1, properties + c); - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - commit(); -} - -void next() { - x++; - if (x >= 80) { - y++; - x %= 80; - } - - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } -} - -// @todo This does not appear to work quite correctly -void previous() { - x--; - if (x < 0) { - y--; - x %= 80; - } - - if (y < 0) { - y = 0; - x = 0; - } -} - -u8 data = 0; -u8 had = 0; -u8 escape = 0; -u8 escape_parameter_1 = 0; -u8 escape_parameter_2 = 0; - - -void clock() { - u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; - - if (!(signals & 0b01)) { - return; - } - - if (signals & 0b10) { - data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; - had = 1; - } else if (had) { - had = 0; - - if (escape == 1) { - if (data == '[') { - escape = 2; - } else { - escape = 0; - } - } else if (escape) { - switch (data) { - // For now we are only going to implement what we actually use - case 'K': - // Assume parameter 0 - clear_eol(); - escape = 0; - break; - - case 'H': - if (escape_parameter_1 == 0) { - escape_parameter_1 = 1; - } - - if (escape_parameter_2 == 0) { - escape_parameter_2 = 1; - } - - x = escape_parameter_1 - 1; - y = escape_parameter_2 - 1; - escape = 0; - break; - - case 'm': - if (escape_parameter_1 == 0) { - reverse(0); - set_foreground(0b111); - set_background(0); - } else if (escape_parameter_1 == 7) { - reverse(1); - } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { - set_foreground(escape_parameter_1 - 30); - } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { - set_background(escape_parameter_1 - 40); - } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { - set_foreground(escape_parameter_1 - 90 + 8); - } else if (escape_parameter_1 >= 100 && escape_parameter_1 <= 107) { - set_background(escape_parameter_1 - 100 + 8); - } - escape = 0; - break; - - case 'J': - // Assume parameter 2 - clear_screen(); - escape = 0; - break; - - case '0' ... '9': - escape_parameter_1 *= 10; - escape_parameter_1 += (data - 48); - break; - - case ';': - escape_parameter_2 = escape_parameter_1; - escape_parameter_1 = 0; - break; - - default: - escape = 0; - break; - } - } else { - switch (data) { - case '\n': - y++; - if (y >= 45) { - y--; - scroll = (scroll + 1) % 45; - XIOModule_DiscreteWrite(&gpo, 4, scroll); - clear_eol(); - } - break; - - case '\r': - x = 0; - break; - - case 0x08: - previous(); - break; - - case 0x1B: - escape = 1; - escape_parameter_1 = 0; - escape_parameter_2 = 0; - // Handle escape code - break; - - default: - write(data - 32); - next(); - break; - } - } - XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); - } -} - -int main() { - XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module - - microblaze_register_handler(XIOModule_DeviceInterruptHandler, - XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler - - XIOModule_Start(&gpo); // start the GPO module - - XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, - NULL); // register timerTick() as our interrupt handler - XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt - - microblaze_enable_interrupts(); // enable global interrupts - - // Clear the screen - clear_screen(); - - while (1) { - - } -} diff --git a/software/LED_Controller/src/README.txt b/software/LED_Controller/src/README.txt deleted file mode 100644 index c4d32ef..0000000 --- a/software/LED_Controller/src/README.txt +++ /dev/null @@ -1 +0,0 @@ -Empty application. Add your own sources. diff --git a/software/LED_Controller/src/lscript.ld b/software/LED_Controller/src/lscript.ld deleted file mode 100644 index b66868a..0000000 --- a/software/LED_Controller/src/lscript.ld +++ /dev/null @@ -1,212 +0,0 @@ -/*******************************************************************/ -/* */ -/* This file is automatically generated by linker script generator.*/ -/* */ -/* Version: Xilinx EDK 14.7 EDK_P.20131013 */ -/* */ -/* Copyright (c) 2010 Xilinx, Inc. All rights reserved. */ -/* */ -/* Description : MicroBlaze Linker Script */ -/* */ -/*******************************************************************/ - -_STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE : 0x400; -_HEAP_SIZE = DEFINED(_HEAP_SIZE) ? _HEAP_SIZE : 0x400; - -/* Define Memories in the system */ - -MEMORY -{ - ilmb_cntlr_dlmb_cntlr : ORIGIN = 0x00000050, LENGTH = 0x00003FB0 -} - -/* Specify the default entry point to the program */ - -ENTRY(_start) - -/* Define the sections, and where they are mapped in memory */ - -SECTIONS -{ -.vectors.reset 0x00000000 : { - KEEP (*(.vectors.reset)) -} - -.vectors.sw_exception 0x00000008 : { - KEEP (*(.vectors.sw_exception)) -} - -.vectors.interrupt 0x00000010 : { - KEEP (*(.vectors.interrupt)) -} - -.vectors.hw_exception 0x00000020 : { - KEEP (*(.vectors.hw_exception)) -} - -.text : { - *(.text) - *(.text.*) - *(.gnu.linkonce.t.*) -} > ilmb_cntlr_dlmb_cntlr - -.init : { - KEEP (*(.init)) -} > ilmb_cntlr_dlmb_cntlr - -.fini : { - KEEP (*(.fini)) -} > ilmb_cntlr_dlmb_cntlr - -.ctors : { - __CTOR_LIST__ = .; - ___CTORS_LIST___ = .; - KEEP (*crtbegin.o(.ctors)) - KEEP (*(EXCLUDE_FILE(*crtend.o) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - __CTOR_END__ = .; - ___CTORS_END___ = .; -} > ilmb_cntlr_dlmb_cntlr - -.dtors : { - __DTOR_LIST__ = .; - ___DTORS_LIST___ = .; - KEEP (*crtbegin.o(.dtors)) - KEEP (*(EXCLUDE_FILE(*crtend.o) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - PROVIDE(__DTOR_END__ = .); - PROVIDE(___DTORS_END___ = .); -} > ilmb_cntlr_dlmb_cntlr - -.rodata : { - __rodata_start = .; - *(.rodata) - *(.rodata.*) - *(.gnu.linkonce.r.*) - __rodata_end = .; -} > ilmb_cntlr_dlmb_cntlr - -.sdata2 : { - . = ALIGN(8); - __sdata2_start = .; - *(.sdata2) - *(.sdata2.*) - *(.gnu.linkonce.s2.*) - . = ALIGN(8); - __sdata2_end = .; -} > ilmb_cntlr_dlmb_cntlr - -.sbss2 : { - __sbss2_start = .; - *(.sbss2) - *(.sbss2.*) - *(.gnu.linkonce.sb2.*) - __sbss2_end = .; -} > ilmb_cntlr_dlmb_cntlr - -.data : { - . = ALIGN(4); - __data_start = .; - *(.data) - *(.data.*) - *(.gnu.linkonce.d.*) - __data_end = .; -} > ilmb_cntlr_dlmb_cntlr - -.got : { - *(.got) -} > ilmb_cntlr_dlmb_cntlr - -.got1 : { - *(.got1) -} > ilmb_cntlr_dlmb_cntlr - -.got2 : { - *(.got2) -} > ilmb_cntlr_dlmb_cntlr - -.eh_frame : { - *(.eh_frame) -} > ilmb_cntlr_dlmb_cntlr - -.jcr : { - *(.jcr) -} > ilmb_cntlr_dlmb_cntlr - -.gcc_except_table : { - *(.gcc_except_table) -} > ilmb_cntlr_dlmb_cntlr - -.sdata : { - . = ALIGN(8); - __sdata_start = .; - *(.sdata) - *(.sdata.*) - *(.gnu.linkonce.s.*) - __sdata_end = .; -} > ilmb_cntlr_dlmb_cntlr - -.sbss (NOLOAD) : { - . = ALIGN(4); - __sbss_start = .; - *(.sbss) - *(.sbss.*) - *(.gnu.linkonce.sb.*) - . = ALIGN(8); - __sbss_end = .; -} > ilmb_cntlr_dlmb_cntlr - -.tdata : { - __tdata_start = .; - *(.tdata) - *(.tdata.*) - *(.gnu.linkonce.td.*) - __tdata_end = .; -} > ilmb_cntlr_dlmb_cntlr - -.tbss : { - __tbss_start = .; - *(.tbss) - *(.tbss.*) - *(.gnu.linkonce.tb.*) - __tbss_end = .; -} > ilmb_cntlr_dlmb_cntlr - -.bss (NOLOAD) : { - . = ALIGN(4); - __bss_start = .; - *(.bss) - *(.bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - __bss_end = .; -} > ilmb_cntlr_dlmb_cntlr - -_SDA_BASE_ = __sdata_start + ((__sbss_end - __sdata_start) / 2 ); - -_SDA2_BASE_ = __sdata2_start + ((__sbss2_end - __sdata2_start) / 2 ); - -/* Generate Stack and Heap definitions */ - -.heap (NOLOAD) : { - . = ALIGN(8); - _heap = .; - _heap_start = .; - . += _HEAP_SIZE; - _heap_end = .; -} > ilmb_cntlr_dlmb_cntlr - -.stack (NOLOAD) : { - _stack_end = .; - . += _STACK_SIZE; - . = ALIGN(8); - _stack = .; - __stack = _stack; -} > ilmb_cntlr_dlmb_cntlr - -_end = .; -} - diff --git a/software/LED_Controller_bsp/.cproject b/software/LED_Controller_bsp/.cproject deleted file mode 100644 index d1cde5a..0000000 --- a/software/LED_Controller_bsp/.cproject +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/software/LED_Controller_bsp/.project b/software/LED_Controller_bsp/.project deleted file mode 100644 index 6b7b69e..0000000 --- a/software/LED_Controller_bsp/.project +++ /dev/null @@ -1,76 +0,0 @@ - - - LED_Controller_bsp - - - micro_test - - - - org.eclipse.cdt.make.core.makeBuilder - - - org.eclipse.cdt.core.errorOutputParser - org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.VCErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.MakeErrorParser; - - - org.eclipse.cdt.make.core.append_environment - true - - - org.eclipse.cdt.make.core.build.arguments - - - - org.eclipse.cdt.make.core.build.command - make - - - org.eclipse.cdt.make.core.build.target.auto - all - - - org.eclipse.cdt.make.core.build.target.clean - clean - - - org.eclipse.cdt.make.core.build.target.inc - all - - - org.eclipse.cdt.make.core.enableAutoBuild - true - - - org.eclipse.cdt.make.core.enableCleanBuild - true - - - org.eclipse.cdt.make.core.enableFullBuild - true - - - org.eclipse.cdt.make.core.enabledIncrementalBuild - true - - - org.eclipse.cdt.make.core.environment - - - - org.eclipse.cdt.make.core.stopOnError - false - - - org.eclipse.cdt.make.core.useDefaultBuildCmd - true - - - - - - com.xilinx.sdk.sw.SwProjectNature - org.eclipse.cdt.core.cnature - org.eclipse.cdt.make.core.makeNature - - diff --git a/software/LED_Controller_bsp/.sdkproject b/software/LED_Controller_bsp/.sdkproject deleted file mode 100644 index 20a40c3..0000000 --- a/software/LED_Controller_bsp/.sdkproject +++ /dev/null @@ -1,3 +0,0 @@ -THIRPARTY=false -PROCESSOR=microblaze_mcs -MSS_FILE=system.mss diff --git a/software/LED_Controller_bsp/Makefile b/software/LED_Controller_bsp/Makefile deleted file mode 100644 index fe2a0ef..0000000 --- a/software/LED_Controller_bsp/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Makefile generated by Xilinx SDK. - --include libgen.options - -LIBRARIES = ${PROCESSOR}/lib/libxil.a -MSS = system.mss - -all: libs - @echo 'Finished building libraries' - -libs: $(LIBRARIES) - -$(LIBRARIES): $(MSS) - libgen -hw ${HWSPEC}\ - ${REPOSITORIES}\ - -pe ${PROCESSOR} \ - -log libgen.log \ - $(MSS) - -clean: - rm -rf ${PROCESSOR} diff --git a/software/LED_Controller_bsp/libgen.options b/software/LED_Controller_bsp/libgen.options deleted file mode 100644 index 1c226b3..0000000 --- a/software/LED_Controller_bsp/libgen.options +++ /dev/null @@ -1,3 +0,0 @@ -PROCESSOR=microblaze_mcs -REPOSITORIES= -HWSPEC=../micro_test/system.xml diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/_profile_timer_hw.h b/software/LED_Controller_bsp/microblaze_mcs/include/_profile_timer_hw.h deleted file mode 100755 index 19499f7..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/_profile_timer_hw.h +++ /dev/null @@ -1,292 +0,0 @@ -////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004-11 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. -// -// $Id: _profile_timer_hw.h,v 1.1.2.2 2011/05/30 06:46:18 svemula Exp $ -// -// _program_timer_hw.h: -// Timer related functions -// -////////////////////////////////////////////////////////////////////// - -#ifndef _PROFILE_TIMER_HW_H -#define _PROFILE_TIMER_HW_H - -#include "profile.h" - -#ifdef PROC_PPC -#if defined __GNUC__ -# define SYNCHRONIZE_IO __asm__ volatile ("eieio") -#elif defined __DCC__ -# define SYNCHRONIZE_IO __asm volatile(" eieio") -#else -# define SYNCHRONIZE_IO -#endif -#endif - -#ifdef PROC_PPC -#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); } -#endif - -#define ProfTmrCtr_mWriteReg(BaseAddress, TmrCtrNumber, RegOffset, ValueToWrite)\ - ProfIo_Out32(((BaseAddress) + XTmrCtr_Offsets[(TmrCtrNumber)] + \ - (RegOffset)), (ValueToWrite)) - -#define ProfTimerCtr_mReadReg(BaseAddress, TmrCtrNumber, RegOffset) \ - ProfIo_In32((BaseAddress) + XTmrCtr_Offsets[(TmrCtrNumber)] + (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) - - - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef PROC_PPC -#include "xexception_l.h" -#include "xtime_l.h" -#include "xpseudo_asm.h" -#endif - -#ifdef TIMER_CONNECT_INTC -#include "xintc_l.h" -#include "xintc.h" -#endif // TIMER_CONNECT_INTC - -#if (!defined PPC_PIT_INTERRUPT && !defined PROC_CORTEXA9) -#include "xtmrctr_l.h" -#endif - -#ifdef PROC_CORTEXA9 -#include "xscutimer_hw.h" -#include "xscugic.h" -#endif - -extern unsigned int timer_clk_ticks ; - -//-------------------------------------------------------------------- -// 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 -#endif - -#ifdef PROC_PPC440 -#define XREG_TCR_PIT_INTERRUPT_ENABLE XREG_TCR_DEC_INTERRUPT_ENABLE -#define XREG_TSR_PIT_INTERRUPT_STATUS XREG_TSR_DEC_INTERRUPT_STATUS -#define XREG_SPR_PIT XREG_SPR_DEC -#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 -//-------------------------------------------------------------------- - -#ifdef PPC_PIT_INTERRUPT -#define disable_timer() \ - { \ - unsigned long val; \ - val=mfspr(XREG_SPR_TCR); \ - mtspr(XREG_SPR_TCR, val & ~XREG_TCR_PIT_INTERRUPT_ENABLE); \ - timer_lo_clk_ticks = mfspr(XREG_SPR_PIT); \ - mtspr(XREG_SPR_PIT, 0); \ - } -#else -#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); \ - } -#endif - - - -//-------------------------------------------------------------------- -// 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; \ - val=mfspr(XREG_SPR_TCR); \ - mtspr(XREG_SPR_PIT, timer_lo_clk_ticks); \ - mtspr(XREG_SPR_TCR, val | XREG_TCR_PIT_INTERRUPT_ENABLE); \ - } -#else -#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); \ - } -#endif - - - -//-------------------------------------------------------------------- -// 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; \ - mtspr(XREG_SPR_PIT, timer_clk_ticks); \ - mtspr(XREG_SPR_TSR, XREG_TSR_PIT_INTERRUPT_STATUS); \ - val=mfspr(XREG_SPR_TCR); \ - mtspr(XREG_SPR_TCR, val| XREG_TCR_PIT_INTERRUPT_ENABLE| XREG_TCR_AUTORELOAD_ENABLE); \ - } -#else -#define timer_ack() \ - { \ - unsigned int csr; \ - csr = ProfTmrCtr_mGetControlStatusReg(PROFILE_TIMER_BASEADDR, 0); \ - ProfTmrCtr_mSetControlStatusReg(PROFILE_TIMER_BASEADDR, 0, csr); \ - } -#endif - -//-------------------------------------------------------------------- -#endif // PROC_PPC -//-------------------------------------------------------------------- - - - - -//-------------------------------------------------------------------- -// MicroBlaze Target - Timer related functions -//-------------------------------------------------------------------- -#ifdef PROC_MICROBLAZE - -//-------------------------------------------------------------------- -// 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); \ - } - - -//-------------------------------------------------------------------- -// 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); \ - } - - -//-------------------------------------------------------------------- -// 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); \ - } - -//-------------------------------------------------------------------- -#endif // PROC_MICROBLAZE -//-------------------------------------------------------------------- - -//-------------------------------------------------------------------- -// Cortex A9 Target - Timer related functions -//-------------------------------------------------------------------- -#ifdef PROC_CORTEXA9 - -//-------------------------------------------------------------------- -// 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;\ - Xil_Out32(PROFILE_TIMER_BASEADDR + XSCUTIMER_CONTROL_OFFSET, Reg);\ -} \ - - -//-------------------------------------------------------------------- -// 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 -// -//-------------------------------------------------------------------- -#define timer_ack() \ -{ \ - Xil_Out32(PROFILE_TIMER_BASEADDR + XSCUTIMER_ISR_OFFSET, \ - XSCUTIMER_ISR_EVENT_FLAG_MASK);\ -} - -//-------------------------------------------------------------------- -#endif // PROC_CORTEXA9 -//-------------------------------------------------------------------- - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/bspconfig.h b/software/LED_Controller_bsp/microblaze_mcs/include/bspconfig.h deleted file mode 100644 index a7fdebb..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/bspconfig.h +++ /dev/null @@ -1,15 +0,0 @@ - -/******************************************************************* -* -* CAUTION: This file is automatically generated by libgen. -* Version: Xilinx EDK 14.7 EDK_P.20131013 -* DO NOT EDIT. -* -* Copyright (c) 1995-2012 Xilinx, Inc. All rights reserved. - -* -* Description: Configurations for Standalone BSP -* -*******************************************************************/ - -#define MICROBLAZE_PVR_NONE diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/fsl.h b/software/LED_Controller_bsp/microblaze_mcs/include/fsl.h deleted file mode 100755 index ef588eb..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/fsl.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef _FSL_H -#define _FSL_H - -#include "xbasic_types.h" -#include "mb_interface.h" /* Legacy reasons. We just have to include this guy who defines the FSL stuff */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Extended FSL macros. These now replace all of the previous FSL macros */ -#define FSL_DEFAULT -#define FSL_NONBLOCKING n -#define FSL_EXCEPTION e -#define FSL_CONTROL c -#define FSL_ATOMIC a - -#define FSL_NONBLOCKING_EXCEPTION ne -#define FSL_NONBLOCKING_CONTROL nc -#define FSL_NONBLOCKING_ATOMIC na -#define FSL_EXCEPTION_CONTROL ec -#define FSL_EXCEPTION_ATOMIC ea -#define FSL_CONTROL_ATOMIC ca - -#define FSL_NONBLOCKING_EXCEPTION_CONTROL nec -#define FSL_NONBLOCKING_EXCEPTION_ATOMIC nea -#define FSL_NONBLOCKING_CONTROL_ATOMIC nca -#define FSL_EXCEPTION_CONTROL_ATOMIC eca - -#define FSL_NONBLOCKING_EXCEPTION_CONTROL_ATOMIC neca - -#define getfslx(val, id, flags) asm volatile (stringify(flags) "get\t%0,rfsl" stringify(id) : "=d" (val)) -#define putfslx(val, id, flags) asm volatile (stringify(flags) "put\t%0,rfsl" stringify(id) :: "d" (val)) - -#define tgetfslx(val, id, flags) asm volatile ("t" stringify(flags) "get\t%0,rfsl" stringify(id) : "=d" (val)) -#define tputfslx(id, flags) asm volatile ("t" stringify(flags) "put\trfsl" stringify(id)) - -#define getdfslx(val, var, flags) asm volatile (stringify(flags) "getd\t%0,%1" : "=d" (val) : "d" (var)) -#define putdfslx(val, var, flags) asm volatile (stringify(flags) "putd\t%0,%1" :: "d" (val), "d" (var)) - -#define tgetdfslx(val, var, flags) asm volatile ("t" stringify(flags) "getd\t%0,%1" : "=d" (val) : "d" (var)) -#define tputdfslx(var, flags) asm volatile ("t" stringify(flags) "putd\t%0" :: "d" (var)) - - -#ifdef __cplusplus -} -#endif -#endif /* _FSL_H */ - diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/mb_interface.h b/software/LED_Controller_bsp/microblaze_mcs/include/mb_interface.h deleted file mode 100755 index 4711927..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/mb_interface.h +++ /dev/null @@ -1,361 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2004-2012 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. -// -// -// Summary: -// Header file for mb_interface -// -// -//////////////////////////////////////////////////////////////////////////////// - -#ifndef _MICROBLAZE_INTERFACE_H_ -#define _MICROBLAZE_INTERFACE_H_ - -#include "xbasic_types.h" - -#ifdef __cplusplus -extern "C" { -#endif -extern void microblaze_enable_interrupts(void); /* Enable Interrupts */ -extern void microblaze_disable_interrupts(void); /* Disable Interrupts */ -extern void microblaze_enable_icache(void); /* Enable Instruction Cache */ -extern void microblaze_disable_icache(void); /* Disable Instruction Cache */ -extern void microblaze_enable_dcache(void); /* Enable Instruction Cache */ -extern void microblaze_disable_dcache(void); /* Disable Instruction Cache */ -extern void microblaze_enable_exceptions(void); /* Enable hardware exceptions */ -extern void microblaze_disable_exceptions(void); /* Disable hardware exceptions */ -extern void microblaze_register_handler(XInterruptHandler Handler, void *DataPtr); /* Register top level interrupt handler */ -extern void microblaze_register_exception_handler(Xuint8 ExceptionId, XExceptionHandler Handler, void *DataPtr); /* Register exception handler */ - -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_scrub(void); /* Scrub LMB and internal BRAM */ - -/* 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)); - -/* necessary for pre-processor */ -#define stringify(s) tostring(s) -#define tostring(s) #s - -/* FSL Access Macros */ - -/* Blocking Data Read and Write to FSL no. id */ -#define getfsl(val, id) asm volatile ("get\t%0,rfsl" stringify(id) : "=d" (val)) -#define putfsl(val, id) asm volatile ("put\t%0,rfsl" stringify(id) :: "d" (val)) - -/* Non-blocking Data Read and Write to FSL no. id */ -#define ngetfsl(val, id) asm volatile ("nget\t%0,rfsl" stringify(id) : "=d" (val)) -#define nputfsl(val, id) asm volatile ("nput\t%0,rfsl" stringify(id) :: "d" (val)) - -/* Blocking Control Read and Write to FSL no. id */ -#define cgetfsl(val, id) asm volatile ("cget\t%0,rfsl" stringify(id) : "=d" (val)) -#define cputfsl(val, id) asm volatile ("cput\t%0,rfsl" stringify(id) :: "d" (val)) - -/* Non-blocking Control Read and Write to FSL no. id */ -#define ncgetfsl(val, id) asm volatile ("ncget\t%0,rfsl" stringify(id) : "=d" (val)) -#define ncputfsl(val, id) asm volatile ("ncput\t%0,rfsl" stringify(id) :: "d" (val)) - -/* Polling versions of FSL access macros. This makes the FSL access interruptible */ -#define getfsl_interruptible(val, id) asm volatile ("\n1:\n\tnget\t%0,rfsl" stringify(id) "\n\t" \ - "addic\tr18,r0,0\n\t" \ - "bnei\tr18,1b\n" \ - : "=d" (val) :: "r18") - -#define putfsl_interruptible(val, id) asm volatile ("\n1:\n\tnput\t%0,rfsl" stringify(id) "\n\t" \ - "addic\tr18,r0,0\n\t" \ - "bnei\tr18,1b\n" \ - :: "d" (val) : "r18") - -#define cgetfsl_interruptible(val, id) asm volatile ("\n1:\n\tncget\t%0,rfsl" stringify(id) "\n\t" \ - "addic\tr18,r0,0\n\t" \ - "bnei\tr18,1b\n" \ - : "=d" (val) :: "r18") - -#define cputfsl_interruptible(val, id) asm volatile ("\n1:\n\tncput\t%0,rfsl" stringify(id) "\n\t" \ - "addic\tr18,r0,0\n\t" \ - "bnei\tr18,1b\n" \ - :: "d" (val) : "r18") -/* FSL valid and error check macros. */ -#define fsl_isinvalid(result) asm volatile ("addic\t%0,r0,0" : "=d" (result)) -#define fsl_iserror(error) asm volatile ("mfs\t%0,rmsr\n\t" \ - "andi\t%0,%0,0x10" : "=d" (error)) - -/* Pseudo assembler instructions */ -#define clz(v) ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "clz\t%0,%1\n" : "=d"(_rval): "d" (v) \ - ); \ - _rval; \ - }) - -#define mbar(mask) ({ __asm__ __volatile__ ("mbar\t" stringify(mask) ); }) -#define mb_sleep() ({ __asm__ __volatile__ ("sleep\t"); }) - -#define mb_swapb(v) ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "swapb\t%0,%1\n" : "=d"(_rval) : "d" (v) \ - ); \ - _rval; \ - }) - -#define mb_swaph(v) ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "swaph\t%0,%1\n" : "=d"(_rval) : "d" (v) \ - ); \ - _rval; \ - }) - -#define mfgpr(rn) ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "or\t%0,r0," stringify(rn) "\n" : "=d"(_rval) \ - ); \ - _rval; \ - }) - -#define mfmsr() ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "mfs\t%0,rmsr\n" : "=d"(_rval) \ - ); \ - _rval; \ - }) - -#define mfear() ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "mfs\t%0,rear\n" : "=d"(_rval) \ - ); \ - _rval; \ - }) - -#define mfesr() ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "mfs\t%0,resr\n" : "=d"(_rval) \ - ); \ - _rval; \ - }) - -#define mffsr() ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "mfs\t%0,rfsr\n" : "=d"(_rval) \ - ); \ - _rval; \ - }) - -#define mfpvr(rn) ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "mfs\t%0,rpvr" stringify(rn) "\n" : "=d"(_rval) \ - ); \ - _rval; \ - }) - -#define mfbtr() ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "mfs\t%0,rbtr\n" : "=d"(_rval) \ - ); \ - _rval; \ - }) - -#define mfedr() ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "mfs\t%0,redr\n" : "=d"(_rval) \ - ); \ - _rval; \ - }) - -#define mfpid() ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "mfs\t%0,rpid\n" : "=d"(_rval)\ - ); \ - _rval; \ - }) - -#define mfzpr() ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "mfs\t%0,rzpr\n" : "=d"(_rval) \ - ); \ - _rval; \ - }) - -#define mftlbx() ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "mfs\t%0,rtlbx\n" : "=d"(_rval) \ - ); \ - _rval; \ - }) - -#define mftlblo() ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "mfs\t%0,rtlblo\n" : "=d"(_rval) \ - ); \ - _rval; \ - }) - -#define mftlbhi() ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "mfs\t%0,rtlbhi\n" : "=d"(_rval) \ - ); \ - _rval; \ - }) - -#define mfslr() ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "mfs\t%0,rslr\n" : "=d"(_rval) \ - ); \ - _rval; \ - }) - -#define mfshr() ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "mfs\t%0,rshr\n" : "=d"(_rval) \ - ); \ - _rval; \ - }) - -#define mtgpr(rn, v) ({ __asm__ __volatile__ ( \ - "or\t" stringify(rn) ",r0,%0\n" :: "d" (v) \ - ); \ - }) - -#define mtmsr(v) ({ __asm__ __volatile__ ( \ - "mts\trmsr,%0\n\tnop\n" :: "d" (v) \ - ); \ - }) - - -#define mtfsr(v) ({ __asm__ __volatile__ ( \ - "mts\trfsr,%0\n\tnop\n" :: "d" (v) \ - ); \ - }) - -#define mtpid(v) ({ __asm__ __volatile__ ( \ - "mts\trpid,%0\n\tnop\n" :: "d" (v) \ - ); \ - }) - -#define mtzpr(v) ({ __asm__ __volatile__ ( \ - "mts\trzpr,%0\n\tnop\n" :: "d" (v) \ - ); \ - }) - -#define mttlbx(v) ({ __asm__ __volatile__ ( \ - "mts\trtlbx,%0\n\tnop\n" :: "d" (v) \ - ); \ - }) - -#define mttlblo(v) ({ __asm__ __volatile__ ( \ - "mts\trtlblo,%0\n\tnop\n" :: "d" (v) \ - ); \ - }) - -#define mttlbhi(v) ({ __asm__ __volatile__ ( \ - "mts\trtlbhi,%0\n\tnop\n" :: "d" (v) \ - ); \ - }) - -#define mttlbsx(v) ({ __asm__ __volatile__ ( \ - "mts\trtlbsx,%0\n\tnop\n" :: "d" (v) \ - ); \ - }) - -#define mtslr(v) ({ __asm__ __volatile__ ( \ - "mts\trslr,%0\n\tnop\n" :: "d" (v) \ - ); \ - }) - -#define mtshr(v) ({ __asm__ __volatile__ ( \ - "mts\trshr,%0\n\tnop\n" :: "d" (v) \ - ); \ - }) - -#define lwx(address) ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "lwx\t%0,%1,r0\n" : "=d"(_rval) : "d" (address) \ - ); \ - _rval; \ - }) - -#define lwr(address) ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "lwr\t%0,%1,r0\n" : "=d"(_rval) : "d" (address) \ - ); \ - _rval; \ - }) - -#define lhur(address) ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "lhur\t%0,%1,r0\n" : "=d"(_rval) : "d" (address) \ - ); \ - _rval; \ - }) - -#define lbur(address) ({ unsigned int _rval; \ - __asm__ __volatile__ ( \ - "lbur\t%0,%1,r0\n" : "=d"(_rval) : "d" (address) \ - ); \ - _rval; \ - }) - -#define swx(address, data) ({ __asm__ __volatile__ ( \ - "swx\t%0,%1,r0\n" :: "d" (data), "d" (address) \ - ); \ - }) - -#define swr(address, data) ({ __asm__ __volatile__ ( \ - "swr\t%0,%1,r0\n" :: "d" (data), "d" (address) \ - ); \ - }) - -#define shr(address, data) ({ __asm__ __volatile__ ( \ - "shr\t%0,%1,r0\n" :: "d" (data), "d" (address) \ - ); \ - }) - -#define sbr(address, data) ({ __asm__ __volatile__ ( \ - "sbr\t%0,%1,r0\n" :: "d" (data), "d" (address) \ - ); \ - }) - -#define microblaze_getfpex_operand_a() ({ \ - extern unsigned int mb_fpex_op_a; \ - mb_fpex_op_a; \ - }) - -#define microblaze_getfpex_operand_b() ({ \ - extern unsigned int mb_fpex_op_b; \ - mb_fpex_op_b; \ - }) - -/* Deprecated MicroBlaze FSL macros */ -#define microblaze_bread_datafsl(val, id) getfsl(val,id) -#define microblaze_bwrite_datafsl(val, id) putfsl(val,id) -#define microblaze_nbread_datafsl(val, id) ngetfsl(val,id) -#define microblaze_nbwrite_datafsl(val, id) nputfsl(val,id) -#define microblaze_bread_cntlfsl(val, id) cgetfsl(val,id) -#define microblaze_bwrite_cntlfsl(val, id) cputfsl(val,id) -#define microblaze_nbread_cntlfsl(val, id) ncgetfsl(val,id) -#define microblaze_nbwrite_cntlfsl(val, id) ncputfsl(val,id) - -#ifdef __cplusplus -} -#endif -#endif // _MICROBLAZE_INTERFACE_H_ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/mblaze_nt_types.h b/software/LED_Controller_bsp/microblaze_mcs/include/mblaze_nt_types.h deleted file mode 100755 index 2cf77fe..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/mblaze_nt_types.h +++ /dev/null @@ -1,51 +0,0 @@ -////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-11 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. -// -// $Id: mblaze_nt_types.h,v 1.1.2.2 2011/05/30 06:46:18 svemula Exp $ -// -////////////////////////////////////////////////////////////////////// - -#ifndef _MBLAZE_NT_TYPES_H -#define _MBLAZE_NT_TYPES_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef char byte; -typedef short half; -typedef int word; -typedef unsigned char ubyte; -typedef unsigned short uhalf; -typedef unsigned int uword; -typedef ubyte boolean; - -//typedef unsigned char u_char; -//typedef unsigned short u_short; -//typedef unsigned int u_int; -//typedef unsigned long u_long; - -typedef short int16_t; -typedef unsigned short uint16_t; -typedef int int32_t; -typedef unsigned int uint32_t; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/microblaze_exceptions_g.h b/software/LED_Controller_bsp/microblaze_mcs/include/microblaze_exceptions_g.h deleted file mode 100644 index 4e3450a..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/microblaze_exceptions_g.h +++ /dev/null @@ -1,14 +0,0 @@ - -/******************************************************************* -* -* CAUTION: This file is automatically generated by libgen. -* Version: Xilinx EDK 14.7 EDK_P.20131013 -* DO NOT EDIT. -* -* Copyright (c) 1995-2012 Xilinx, Inc. All rights reserved. - -* -* Description: Exception Handling Header for MicroBlaze Processor -* -*******************************************************************/ - diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/microblaze_exceptions_i.h b/software/LED_Controller_bsp/microblaze_mcs/include/microblaze_exceptions_i.h deleted file mode 100755 index 9102c67..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/microblaze_exceptions_i.h +++ /dev/null @@ -1,73 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2004-2011 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. -// -// $Id: microblaze_exceptions_i.h,v 1.1.2.1 2011/05/17 04:37:29 sadanan Exp $ -//////////////////////////////////////////////////////////////////////////////// - -/*****************************************************************************/ -/** -* -* @file microblaze_exceptions_i.h -* -* This header file contains defines for structures used by the microblaze -* hardware exception handler. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Date     Changes
-* ----- -------- -----------------------------------------------
-* 1.00a 06/24/04 First release
-* 
-* -******************************************************************************/ - -#ifndef MICROBLAZE_EXCEPTIONS_I_H /* prevent circular inclusions */ -#define MICROBLAZE_EXCEPTIONS_I_H /* by using protection macros */ - -/***************************** Include Files *********************************/ - -#include "xbasic_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct -{ - XExceptionHandler Handler; - void *CallBackRef; -} 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 - -void microblaze_register_exception_handler(Xuint8 ExceptionId, XExceptionHandler Handler, void *DataPtr); - -#ifdef __cplusplus -} -#endif -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/microblaze_interrupts_i.h b/software/LED_Controller_bsp/microblaze_mcs/include/microblaze_interrupts_i.h deleted file mode 100755 index 266cf38..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/microblaze_interrupts_i.h +++ /dev/null @@ -1,61 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2004 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. -// -// $Id: microblaze_interrupts_i.h,v 1.1.2.1 2011/05/17 04:37:31 sadanan Exp $ -//////////////////////////////////////////////////////////////////////////////// - -/*****************************************************************************/ -/** -* -* @file microblaze_interrupts_i.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 xintc.h. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Date     Changes
-* ----- -------- -----------------------------------------------
-* 1.00b 10/03/03 First release
-* 
-* -******************************************************************************/ - -#ifndef MICROBLAZE_INTERRUPTS_I_H /* prevent circular inclusions */ -#define MICROBLAZE_INTERRUPTS_I_H /* by using protection macros */ - -/***************************** Include Files *********************************/ - -#include "xbasic_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct -{ - XInterruptHandler Handler; - void *CallBackRef; -} MB_InterruptVectorTableEntry; - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/profile.h b/software/LED_Controller_bsp/microblaze_mcs/include/profile.h deleted file mode 100755 index 0657e6f..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/profile.h +++ /dev/null @@ -1,127 +0,0 @@ -////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-11 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. -// -// $Id: profile.h,v 1.1.2.2 2011/05/30 06:46:18 svemula Exp $ -// -////////////////////////////////////////////////////////////////////// - -#ifndef _PROFILE_H -#define _PROFILE_H 1 - -#include -#include "mblaze_nt_types.h" -#include "profile_config.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void _system_init( void ) ; -void _system_clean( void ) ; -void mcount(unsigned long frompc, unsigned long selfpc); -void profile_intr_handler( void ) ; - - - -/**************************************************************************** - * Profiling on hardware - Hash table maintained on hardware and data sent - * to xmd for gmon.out generation. - ****************************************************************************/ -/* - * histogram counters are unsigned shorts (according to the kernel). - */ -#define HISTCOUNTER unsigned short - -struct tostruct { - unsigned long selfpc; - long count; - short link; - unsigned short pad; -}; - -struct fromstruct { - unsigned long frompc ; - short link ; - unsigned short pad ; -} ; - -/* - * general rounding functions. - */ -#define ROUNDDOWN(x,y) (((x)/(y))*(y)) -#define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y)) - -/* - * The profiling data structures are housed in this structure. - */ -struct gmonparam { - long int state; - - // Histogram Information - unsigned short *kcount; /* No. of bins in histogram */ - unsigned long kcountsize; /* Histogram samples */ - - // Call-graph Information - struct fromstruct *froms; - unsigned long 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; -}; -extern struct gmonparam *_gmonparam; -extern int n_gmon_sections; - -/* - * Possible states of profiling. - */ -#define GMON_PROF_ON 0 -#define GMON_PROF_BUSY 1 -#define GMON_PROF_ERROR 2 -#define GMON_PROF_OFF 3 - -/* - * Sysctl definitions for extracting profiling information from the kernel. - */ -#define GPROF_STATE 0 /* int: profiling enabling variable */ -#define GPROF_COUNT 1 /* struct: profile tick count buffer */ -#define GPROF_FROMS 2 /* struct: from location hash bucket */ -#define GPROF_TOS 3 /* struct: destination/count structure */ -#define GPROF_GMONPARAM 4 /* struct: profiling parameters (see above) */ - -#ifdef __cplusplus -} -#endif - -#endif /* _PROFILE_H */ - - - - - - - - - - - - diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/pvr.h b/software/LED_Controller_bsp/microblaze_mcs/include/pvr.h deleted file mode 100755 index 28a0b8a..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/pvr.h +++ /dev/null @@ -1,264 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2006-2011 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. -// -// $Id: pvr.h,v 1.1.2.1 2011/05/17 04:37:34 sadanan Exp $ -//////////////////////////////////////////////////////////////////////////////// - -/*****************************************************************************/ -/** -* -* @file pvr.h -* -* This header file contains defines for structures used by the microblaze -* PVR routines -* -******************************************************************************/ - -#ifndef _PVR_H -#define _PVR_H - -#include "xbasic_types.h" -#include "xparameters.h" -#include "mb_interface.h" -#include "bspconfig.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Defs */ -typedef struct pvr_s { -#ifdef MICROBLAZE_PVR_FULL - unsigned int pvr[16]; -#else - unsigned int pvr[1]; -#endif -} pvr_t; - - -#define getpvr(pvrid, val) asm volatile ("mfs\t%0,rpvr" stringify(pvrid) "\n\t" : "=d" (val)) - -/* Basic PVR mask */ -#define MICROBLAZE_PVR0_PVR_FULL_MASK 0x80000000 -#define MICROBLAZE_PVR0_USE_BARREL_MASK 0x40000000 -#define MICROBLAZE_PVR0_USE_DIV_MASK 0x20000000 -#define MICROBLAZE_PVR0_USE_HW_MUL_MASK 0x10000000 -#define MICROBLAZE_PVR0_USE_FPU_MASK 0x08000000 -#define MICROBLAZE_PVR0_USE_EXCEPTION_MASK 0x04000000 -#define MICROBLAZE_PVR0_USE_ICACHE_MASK 0x02000000 -#define MICROBLAZE_PVR0_USE_DCACHE_MASK 0x01000000 -#define MICROBLAZE_PVR0_USE_MMU_MASK 0x00800000 -#define MICROBLAZE_PVR0_USE_BTC_MASK 0x00400000 -#define MICROBLAZE_PVR0_ENDIANNESS_MASK 0x00200000 -#define MICROBLAZE_PVR0_FAULT_TOLERANT_MASK 0x00100000 -#define MICROBLAZE_PVR0_STACK_PROTECTION_MASK 0x00080000 -#define MICROBLAZE_PVR0_MICROBLAZE_VERSION_MASK 0x0000FF00 -#define MICROBLAZE_PVR0_USER1_MASK 0x000000FF - -/* User 2 PVR mask */ -#define MICROBLAZE_PVR1_USER2_MASK 0xFFFFFFFF - -/* Configuration PVR masks */ -#define MICROBLAZE_PVR2_D_AXI_MASK 0x80000000 -#define MICROBLAZE_PVR2_D_LMB_MASK 0x40000000 -#define MICROBLAZE_PVR2_D_PLB_MASK 0x02000000 -#define MICROBLAZE_PVR2_I_AXI_MASK 0x20000000 -#define MICROBLAZE_PVR2_I_LMB_MASK 0x10000000 -#define MICROBLAZE_PVR2_I_PLB_MASK 0x01000000 -#define MICROBLAZE_PVR2_INTERRUPT_IS_EDGE_MASK 0x08000000 -#define MICROBLAZE_PVR2_EDGE_IS_POSITIVE_MASK 0x04000000 -#define MICROBLAZE_PVR2_INTERCONNECT_MASK 0x00800000 -#define MICROBLAZE_PVR2_STREAM_INTERCONNECT_MASK 0x00400000 -#define MICROBLAZE_PVR2_USE_EXTENDED_FSL_INSTR_MASK 0x00080000 -#define MICROBLAZE_PVR2_USE_MSR_INSTR_MASK 0x00020000 -#define MICROBLAZE_PVR2_USE_PCMP_INSTR_MASK 0x00010000 -#define MICROBLAZE_PVR2_AREA_OPTIMIZED_MASK 0x00008000 -#define MICROBLAZE_PVR2_USE_BARREL_MASK 0x00004000 -#define MICROBLAZE_PVR2_USE_DIV_MASK 0x00002000 -#define MICROBLAZE_PVR2_USE_HW_MUL_MASK 0x00001000 -#define MICROBLAZE_PVR2_USE_FPU_MASK 0x00000800 -#define MICROBLAZE_PVR2_USE_FPU2_MASK 0x00000200 -#define MICROBLAZE_PVR2_USE_MUL64_MASK 0x00000400 -#define MICROBLAZE_PVR2_OPCODE_0x0_ILLEGAL_MASK 0x00000040 -#define MICROBLAZE_PVR2_UNALIGNED_EXCEPTION_MASK 0x00000020 -#define MICROBLAZE_PVR2_ILL_OPCODE_EXCEPTION_MASK 0x00000010 -#define MICROBLAZE_PVR2_M_AXI_I_BUS_EXCEPTION_MASK 0x00000008 -#define MICROBLAZE_PVR2_M_AXI_D_BUS_EXCEPTION_MASK 0x00000004 -#define MICROBLAZE_PVR2_IPLB_BUS_EXCEPTION_MASK 0x00000100 -#define MICROBLAZE_PVR2_DPLB_BUS_EXCEPTION_MASK 0x00000080 -#define MICROBLAZE_PVR2_DIV_ZERO_EXCEPTION_MASK 0x00000002 -#define MICROBLAZE_PVR2_FPU_EXCEPTION_MASK 0x00000001 -#define MICROBLAZE_PVR2_FSL_EXCEPTION_MASK 0x00040000 - -/* Debug and exception PVR masks */ -#define MICROBLAZE_PVR3_DEBUG_ENABLED_MASK 0x80000000 -#define MICROBLAZE_PVR3_NUMBER_OF_PC_BRK_MASK 0x1E000000 -#define MICROBLAZE_PVR3_NUMBER_OF_RD_ADDR_BRK_MASK 0x00380000 -#define MICROBLAZE_PVR3_NUMBER_OF_WR_ADDR_BRK_MASK 0x0000E000 -#define MICROBLAZE_PVR3_FSL_LINKS_MASK 0x00000380 -#define MICROBLAZE_PVR3_BTC_SIZE_MASK 0x00000007 - -/* ICache config PVR masks */ -#define MICROBLAZE_PVR4_USE_ICACHE_MASK 0x80000000 -#define MICROBLAZE_PVR4_ICACHE_ADDR_TAG_BITS_MASK 0x7C000000 -#define MICROBLAZE_PVR4_ICACHE_ALLOW_WR_MASK 0x01000000 -#define MICROBLAZE_PVR4_ICACHE_LINE_LEN_MASK 0x00E00000 -#define MICROBLAZE_PVR4_ICACHE_BYTE_SIZE_MASK 0x001F0000 -#define MICROBLAZE_PVR4_ICACHE_ALWAYS_USED_MASK 0x00008000 -#define MICROBLAZE_PVR4_ICACHE_INTERFACE_MASK 0x00002000 -#define MICROBLAZE_PVR4_ICACHE_VICTIMS_MASK 0x00001C00 -#define MICROBLAZE_PVR4_ICACHE_STREAMS_MASK 0x00000300 -#define MICROBLAZE_PVR4_ICACHE_FORCE_TAG_LUTRAM_MASK 0x00000080 -#define MICROBLAZE_PVR4_ICACHE_DATA_WIDTH_MASK 0x00000040 - -/* DCache config PVR masks */ -#define MICROBLAZE_PVR5_USE_DCACHE_MASK 0x80000000 -#define MICROBLAZE_PVR5_DCACHE_ADDR_TAG_BITS_MASK 0x7C000000 -#define MICROBLAZE_PVR5_DCACHE_ALLOW_WR_MASK 0x01000000 -#define MICROBLAZE_PVR5_DCACHE_LINE_LEN_MASK 0x00E00000 -#define MICROBLAZE_PVR5_DCACHE_BYTE_SIZE_MASK 0x001F0000 -#define MICROBLAZE_PVR5_DCACHE_ALWAYS_USED_MASK 0x00008000 -#define MICROBLAZE_PVR5_DCACHE_USE_WRITEBACK_MASK 0x00004000 -#define MICROBLAZE_PVR5_DCACHE_INTERFACE_MASK 0x00002000 -#define MICROBLAZE_PVR5_DCACHE_VICTIMS_MASK 0x00001C00 -#define MICROBLAZE_PVR5_DCACHE_FORCE_TAG_LUTRAM_MASK 0x00000080 -#define MICROBLAZE_PVR5_DCACHE_DATA_WIDTH_MASK 0x00000040 - -/* ICache base address PVR mask */ -#define MICROBLAZE_PVR6_ICACHE_BASEADDR_MASK 0xFFFFFFFF - -/* ICache high address PVR mask */ -#define MICROBLAZE_PVR7_ICACHE_HIGHADDR_MASK 0xFFFFFFFF - -/* DCache base address PVR mask */ -#define MICROBLAZE_PVR8_DCACHE_BASEADDR_MASK 0xFFFFFFFF - -/* DCache high address PVR mask */ -#define MICROBLAZE_PVR9_DCACHE_HIGHADDR_MASK 0xFFFFFFFF - -/* Target family PVR mask */ -#define MICROBLAZE_PVR10_TARGET_FAMILY_MASK 0xFF000000 - -/* MSR Reset value PVR mask */ -#define MICROBLAZE_PVR11_MSR_RESET_VALUE_MASK 0x000007FF - -/* MMU value PVR mask */ -#define MICROBLAZE_PVR11_MMU_MASK 0xC0000000 -#define MICROBLAZE_PVR11_MMU_ITLB_SIZE_MASK 0x38000000 -#define MICROBLAZE_PVR11_MMU_DTLB_SIZE_MASK 0x07000000 -#define MICROBLAZE_PVR11_MMU_TLB_ACCESS_MASK 0x00C00000 -#define MICROBLAZE_PVR11_MMU_ZONES_MASK 0x003E0000 -#define MICROBLAZE_PVR11_MMU_PRIVILEGED_INSTR_MASK 0x00010000 - -/* PVR access macros */ -#define MICROBLAZE_PVR_IS_FULL(_pvr) (_pvr.pvr[0] & MICROBLAZE_PVR0_PVR_FULL_MASK) -#define MICROBLAZE_PVR_USE_BARREL(_pvr) (_pvr.pvr[0] & MICROBLAZE_PVR0_USE_BARREL_MASK) -#define MICROBLAZE_PVR_USE_DIV(_pvr) (_pvr.pvr[0] & MICROBLAZE_PVR0_USE_DIV_MASK) -#define MICROBLAZE_PVR_USE_HW_MUL(_pvr) (_pvr.pvr[0] & MICROBLAZE_PVR0_USE_HW_MUL_MASK) -#define MICROBLAZE_PVR_USE_FPU(_pvr) (_pvr.pvr[0] & MICROBLAZE_PVR0_USE_FPU_MASK) -#define MICROBLAZE_PVR_USE_ICACHE(_pvr) (_pvr.pvr[0] & MICROBLAZE_PVR0_USE_ICACHE_MASK) -#define MICROBLAZE_PVR_USE_DCACHE(_pvr) (_pvr.pvr[0] & MICROBLAZE_PVR0_USE_DCACHE_MASK) -#define MICROBLAZE_PVR_USE_MMU(_pvr) (_pvr.pvr[0] & MICROBLAZE_PVR0_USE_MMU_MASK) -#define MICROBLAZE_PVR_USE_BTC(_pvr) (_pvr.pvr[0] & MICROBLAZE_PVR0_USE_BTC_MASK) -#define MICROBLAZE_PVR_ENDIANNESS(_pvr) (_pvr.pvr[0] & MICROBLAZE_PVR0_ENDIANNESS_MASK) -#define MICROBLAZE_PVR_FAULT_TOLERANT(_pvr) (_pvr.pvr[0] & MICROBLAZE_PVR0_FAULT_TOLERANT_MASK) -#define MICROBLAZE_PVR_STACK_PROTECTION(_pvr) (_pvr.pvr[0] & MICROBLAZE_PVR0_STACK_PROTECTION_MASK) -#define MICROBLAZE_PVR_MICROBLAZE_VERSION(_pvr) ((_pvr.pvr[0] & MICROBLAZE_PVR0_MICROBLAZE_VERSION_MASK) >> 8) -#define MICROBLAZE_PVR_USER1(_pvr) (_pvr.pvr[0] & MICROBLAZE_PVR0_USER1_MASK) - -#define MICROBLAZE_PVR_USER2(_pvr) (_pvr.pvr[1] & MICROBLAZE_PVR1_USER2_MASK) - -#define MICROBLAZE_PVR_D_AXI(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_D_AXI_MASK) -#define MICROBLAZE_PVR_D_LMB(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_D_LMB_MASK) -#define MICROBLAZE_PVR_D_PLB(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_D_PLB_MASK) -#define MICROBLAZE_PVR_I_AXI(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_I_AXI_MASK) -#define MICROBLAZE_PVR_I_LMB(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_I_LMB_MASK) -#define MICROBLAZE_PVR_I_PLB(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_I_PLB_MASK) -#define MICROBLAZE_PVR_INTERRUPT_IS_EDGE(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_INTERRUPT_IS_EDGE_MASK) -#define MICROBLAZE_PVR_EDGE_IS_POSITIVE(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_EDGE_IS_POSITIVE_MASK) -#define MICROBLAZE_PVR_INTERCONNECT(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_INTERCONNECT_MASK) -#define MICROBLAZE_PVR_STREAM_INTERCONNECT(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_STREAM_INTERCONNECT_MASK) -#define MICROBLAZE_PVR_USE_EXTENDED_FSL_INSTR(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_USE_EXTENDED_FSL_INSTR_MASK) -#define MICROBLAZE_PVR_USE_MSR_INSTR(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_USE_MSR_INSTR_MASK) -#define MICROBLAZE_PVR_USE_PCMP_INSTR(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_USE_PCMP_INSTR_MASK) -#define MICROBLAZE_PVR_AREA_OPTIMIZED(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_AREA_OPTIMIZED_MASK) -#define MICROBLAZE_PVR_USE_MUL64(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_USE_MUL64_MASK) -#define MICROBLAZE_PVR_OPCODE_0x0_ILLEGAL(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_OPCODE_0x0_ILLEGAL_MASK) -#define MICROBLAZE_PVR_UNALIGNED_EXCEPTION(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_UNALIGNED_EXCEPTION_MASK) -#define MICROBLAZE_PVR_ILL_OPCODE_EXCEPTION(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_ILL_OPCODE_EXCEPTION_MASK) -#define MICROBLAZE_PVR_M_AXI_I_BUS_EXCEPTION(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_M_AXI_I_BUS_EXCEPTION_MASK) -#define MICROBLAZE_PVR_IPLB_BUS_EXCEPTION(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_IPLB_BUS_EXCEPTION_MASK) -#define MICROBLAZE_PVR_M_AXI_D_BUS_EXCEPTION(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_M_AXI_D_BUS_EXCEPTION_MASK) -#define MICROBLAZE_PVR_DPLB_BUS_EXCEPTION(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_DPLB_BUS_EXCEPTION_MASK) -#define MICROBLAZE_PVR_DIV_ZERO_EXCEPTION(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_DIV_ZERO_EXCEPTION_MASK) -#define MICROBLAZE_PVR_FPU_EXCEPTION(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_FPU_EXCEPTION_MASK) -#define MICROBLAZE_PVR_FSL_EXCEPTION(_pvr) (_pvr.pvr[2] & MICROBLAZE_PVR2_FSL_EXCEPTION_MASK) - -#define MICROBLAZE_PVR_DEBUG_ENABLED(_pvr) (_pvr.pvr[3] & MICROBLAZE_PVR3_DEBUG_ENABLED_MASK) -#define MICROBLAZE_PVR_NUMBER_OF_PC_BRK(_pvr) ((_pvr.pvr[3] & MICROBLAZE_PVR3_NUMBER_OF_PC_BRK_MASK) >> 25) -#define MICROBLAZE_PVR_NUMBER_OF_RD_ADDR_BRK(_pvr) ((_pvr.pvr[3] & MICROBLAZE_PVR3_NUMBER_OF_RD_ADDR_BRK_MASK) >> 19) -#define MICROBLAZE_PVR_NUMBER_OF_WR_ADDR_BRK(_pvr) ((_pvr.pvr[3] & MICROBLAZE_PVR3_NUMBER_OF_WR_ADDR_BRK_MASK) >> 13) -#define MICROBLAZE_PVR_FSL_LINKS(_pvr) ((_pvr.pvr[3] & MICROBLAZE_PVR3_FSL_LINKS_MASK) >> 7) -#define MICROBLAZE_PVR_BTC_SIZE(_pvr) (_pvr.pvr[3] & MICROBLAZE_PVR3_BTC_SIZE_MASK) - -#define MICROBLAZE_PVR_ICACHE_ADDR_TAG_BITS(_pvr) ((_pvr.pvr[4] & MICROBLAZE_PVR4_ICACHE_ADDR_TAG_BITS_MASK) >> 26) -#define MICROBLAZE_PVR_ICACHE_ALLOW_WR(_pvr) (_pvr.pvr[4] & MICROBLAZE_PVR4_ICACHE_ALLOW_WR_MASK) -#define MICROBLAZE_PVR_ICACHE_LINE_LEN(_pvr) (1 << ((_pvr.pvr[4] & MICROBLAZE_PVR4_ICACHE_LINE_LEN_MASK) >> 21)) -#define MICROBLAZE_PVR_ICACHE_BYTE_SIZE(_pvr) (1 << ((_pvr.pvr[4] & MICROBLAZE_PVR4_ICACHE_BYTE_SIZE_MASK) >> 16)) -#define MICROBLAZE_PVR_ICACHE_ALWAYS_USED(_pvr) (_pvr.pvr[4] & MICROBLAZE_PVR4_ICACHE_ALWAYS_USED_MASK) -#define MICROBLAZE_PVR_ICACHE_INTERFACE(_pvr) (_pvr.pvr[4] & MICROBLAZE_PVR4_ICACHE_INTERFACE_MASK) -#define MICROBLAZE_PVR_ICACHE_VICTIMS(_pvr) ((_pvr.pvr[4] & MICROBLAZE_PVR4_ICACHE_VICTIMS_MASK) >> 10) -#define MICROBLAZE_PVR_ICACHE_STREAMS(_pvr) ((_pvr.pvr[4] & MICROBLAZE_PVR4_ICACHE_STREAMS_MASK) >> 8) -#define MICROBLAZE_PVR_ICACHE_FORCE_TAG_LUTRAM(_pvr) (_pvr.pvr[4] & MICROBLAZE_PVR4_ICACHE_FORCE_TAG_LUTRAM_MASK) -#define MICROBLAZE_PVR_ICACHE_DATA_WIDTH(_pvr) (_pvr.pvr[4] & MICROBLAZE_PVR4_ICACHE_DATA_WIDTH_MASK) - -#define MICROBLAZE_PVR_DCACHE_ADDR_TAG_BITS(_pvr) ((_pvr.pvr[5] & MICROBLAZE_PVR5_DCACHE_ADDR_TAG_BITS_MASK) >> 26) -#define MICROBLAZE_PVR_DCACHE_ALLOW_WR(_pvr) (_pvr.pvr[5] & MICROBLAZE_PVR5_DCACHE_ALLOW_WR_MASK) -#define MICROBLAZE_PVR_DCACHE_LINE_LEN(_pvr) (1 << ((_pvr.pvr[5] & MICROBLAZE_PVR5_DCACHE_LINE_LEN_MASK) >> 21)) -#define MICROBLAZE_PVR_DCACHE_BYTE_SIZE(_pvr) (1 << ((_pvr.pvr[5] & MICROBLAZE_PVR5_DCACHE_BYTE_SIZE_MASK) >> 16)) -#define MICROBLAZE_PVR_DCACHE_ALWAYS_USED(_pvr) (_pvr.pvr[5] & MICROBLAZE_PVR5_DCACHE_ALWAYS_USED_MASK) -#define MICROBLAZE_PVR_DCACHE_USE_WRITEBACK(_pvr) (_pvr.pvr[5] & MICROBLAZE_PVR5_DCACHE_USE_WRITEBACK_MASK) -#define MICROBLAZE_PVR_DCACHE_INTERFACE(_pvr) (_pvr.pvr[5] & MICROBLAZE_PVR5_DCACHE_INTERFACE_MASK) -#define MICROBLAZE_PVR_DCACHE_VICTIMS(_pvr) ((_pvr.pvr[5] & MICROBLAZE_PVR5_DCACHE_VICTIMS_MASK) >> 10) -#define MICROBLAZE_PVR_DCACHE_FORCE_TAG_LUTRAM(_pvr) (_pvr.pvr[5] & MICROBLAZE_PVR5_DCACHE_FORCE_TAG_LUTRAM_MASK) -#define MICROBLAZE_PVR_DCACHE_DATA_WIDTH(_pvr) (_pvr.pvr[5] & MICROBLAZE_PVR5_DCACHE_DATA_WIDTH_MASK) - -#define MICROBLAZE_PVR_ICACHE_BASEADDR(_pvr) (_pvr.pvr[6] & MICROBLAZE_PVR6_ICACHE_BASEADDR_MASK) -#define MICROBLAZE_PVR_ICACHE_HIGHADDR(_pvr) (_pvr.pvr[7] & MICROBLAZE_PVR7_ICACHE_HIGHADDR_MASK) - -#define MICROBLAZE_PVR_DCACHE_BASEADDR(_pvr) (_pvr.pvr[8] & MICROBLAZE_PVR8_DCACHE_BASEADDR_MASK) -#define MICROBLAZE_PVR_DCACHE_HIGHADDR(_pvr) (_pvr.pvr[9] & MICROBLAZE_PVR9_DCACHE_HIGHADDR_MASK) - -#define MICROBLAZE_PVR_TARGET_FAMILY(_pvr) ((_pvr.pvr[10] & MICROBLAZE_PVR10_TARGET_FAMILY_MASK) >> 24) - -#define MICROBLAZE_PVR_MSR_RESET_VALUE(_pvr) (_pvr.pvr[11] & MICROBLAZE_PVR11_MSR_RESET_VALUE_MASK) - -#define MICROBLAZE_PVR_MMU_TYPE(_pvr) ((_pvr.pvr[11] & MICROBLAZE_PVR11_MMU_MASK) >> 30) -#define MICROBLAZE_PVR_MMU_ITLB_SIZE(_pvr) ((_pvr.pvr[11] & MICROBLAZE_PVR11_MMU_ITLB_SIZE_MASK) >> 27) -#define MICROBLAZE_PVR_MMU_DTLB_SIZE(_pvr) ((_pvr.pvr[11] & MICROBLAZE_PVR11_MMU_DTLB_SIZE_MASK) >> 24) -#define MICROBLAZE_PVR_MMU_TLB_ACCESS(_pvr) ((_pvr.pvr[11] & MICROBLAZE_PVR11_MMU_TLB_ACCESS_MASK) >> 22) -#define MICROBLAZE_PVR_MMU_ZONES(_pvr) ((_pvr.pvr[11] & MICROBLAZE_PVR11_MMU_ZONES_MASK) >> 17) -#define MICROBLAZE_PVR_MMU_PRIVILEGED_INSTR(_pvr) ((_pvr.pvr[11] & MICROBLAZE_PVR11_MMU_PRIVILEGED_INSTR_MASK) >> 16) - -/* Protos */ -int microblaze_get_pvr (pvr_t *pvr); - -#ifdef __cplusplus -} -#endif -#endif /* _PVR_H */ - diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xbasic_types.h b/software/LED_Controller_bsp/microblaze_mcs/include/xbasic_types.h deleted file mode 100755 index d5db3f7..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xbasic_types.h +++ /dev/null @@ -1,300 +0,0 @@ -/* $Id: xbasic_types.h,v 1.19.10.4 2011/06/28 11:00:54 sadanan Exp $ */ -/****************************************************************************** -* -* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" -* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND -* SOLUTIONS FOR XILINX DEVICES. 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. -* -* (c) Copyright 2002-2007 Xilinx Inc. -* All rights reserved. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xbasic_types.h -* -* This file contains basic types for Xilinx software IP. These types do not -* follow the standard naming convention with respect to using the component -* name in front of each name because they are considered to be primitives. -* -* @note -* -* This file contains items which are architecture dependent. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who    Date   Changes
-* ----- ---- -------- -------------------------------------------------------
-* 1.00a rmm  12/14/01 First release
-*       rmm  05/09/03 Added "xassert always" macros to rid ourselves of diab
-*                     compiler warnings
-* 1.00a rpm  11/07/03 Added XNullHandler function as a stub interrupt handler
-* 1.00a rpm  07/21/04 Added XExceptionHandler typedef for processor exceptions
-* 1.00a xd   11/03/04 Improved support for doxygen.
-* 1.00a wre  01/25/07 Added Linux style data types u32, u16, u8, TRUE, FALSE
-* 1.00a rpm  04/02/07 Added ifndef KERNEL around u32, u16, u8 data types
-* 
-* -******************************************************************************/ - -#ifndef XBASIC_TYPES_H /* prevent circular inclusions */ -#define XBASIC_TYPES_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - - -/***************************** Include Files *********************************/ - - -/************************** Constant Definitions *****************************/ - -#ifndef TRUE -# define TRUE 1 -#endif - -#ifndef FALSE -# define FALSE 0 -#endif - -#ifndef NULL -#define NULL 0 -#endif - -/** Xilinx NULL, TRUE and FALSE legacy support. Deprecated. */ -#define XNULL NULL -#define XTRUE TRUE -#define XFALSE FALSE - - -#define XCOMPONENT_IS_READY 0x11111111 /**< component has been initialized */ -#define XCOMPONENT_IS_STARTED 0x22222222 /**< component has been started */ - -/* the following constants and declarations are for unit test purposes and are - * designed to be used in test applications. - */ -#define XTEST_PASSED 0 -#define XTEST_FAILED 1 - -#define XASSERT_NONE 0 -#define XASSERT_OCCURRED 1 - -extern unsigned int XAssertStatus; -extern void XAssert(char *, int); - -/**************************** Type Definitions *******************************/ - -/** @name Legacy types - * Deprecated legacy types. - * @{ - */ -typedef unsigned char Xuint8; /**< unsigned 8-bit */ -typedef char Xint8; /**< signed 8-bit */ -typedef unsigned short Xuint16; /**< unsigned 16-bit */ -typedef short Xint16; /**< signed 16-bit */ -typedef unsigned long Xuint32; /**< unsigned 32-bit */ -typedef long Xint32; /**< signed 32-bit */ -typedef float Xfloat32; /**< 32-bit floating point */ -typedef double Xfloat64; /**< 64-bit double precision FP */ -typedef unsigned long Xboolean; /**< boolean (XTRUE or XFALSE) */ - -#if !defined __XUINT64__ -typedef struct -{ - Xuint32 Upper; - Xuint32 Lower; -} Xuint64; -#endif - -/** @name New types - * New simple types. - * @{ - */ -#ifndef __KERNEL__ -#ifndef XIL_TYPES_H -typedef Xuint32 u32; -typedef Xuint16 u16; -typedef Xuint8 u8; -#endif -#else -#include -#endif - -/*@}*/ - -/** - * This data type defines an interrupt handler for a device. - * The argument points to the instance of the component - */ -typedef void (*XInterruptHandler) (void *InstancePtr); - -/** - * This data type defines an exception handler for a processor. - * The argument points to the instance of the component - */ -typedef void (*XExceptionHandler) (void *InstancePtr); - -/** - * This data type defines a callback to be invoked when an - * assert occurs. The callback is invoked only when asserts are enabled - */ -typedef void (*XAssertCallback) (char *FilenamePtr, int LineNumber); - -/***************** Macros (Inline Functions) Definitions *********************/ - -/*****************************************************************************/ -/** -* Return the most significant half of the 64 bit data type. -* -* @param x is the 64 bit word. -* -* @return The upper 32 bits of the 64 bit word. -* -* @note None. -* -******************************************************************************/ -#define XUINT64_MSW(x) ((x).Upper) - -/*****************************************************************************/ -/** -* Return the least significant half of the 64 bit data type. -* -* @param x is the 64 bit word. -* -* @return The lower 32 bits of the 64 bit word. -* -* @note None. -* -******************************************************************************/ -#define XUINT64_LSW(x) ((x).Lower) - - -#ifndef NDEBUG - -/*****************************************************************************/ -/** -* This assert macro is to be used for functions that do not return anything -* (void). This in conjunction with the XWaitInAssert 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, the assert occurs. -* -* @return Returns void unless the XWaitInAssert variable is true, in which -* case no return is made and an infinite loop is entered. -* -* @note None. -* -******************************************************************************/ -#define XASSERT_VOID(expression) \ -{ \ - if (expression) \ - { \ - XAssertStatus = XASSERT_NONE; \ - } \ - else \ - { \ - XAssert(__FILE__, __LINE__); \ - XAssertStatus = XASSERT_OCCURRED; \ - return; \ - } \ -} - -/*****************************************************************************/ -/** -* This assert macro is to be used for functions that do return a value. This in -* conjunction with the XWaitInAssert 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, -* the assert occurs. -* -* @return Returns 0 unless the XWaitInAssert variable is true, in which case -* no return is made and an infinite loop is entered. -* -* @note None. -* -******************************************************************************/ -#define XASSERT_NONVOID(expression) \ -{ \ - if (expression) \ - { \ - XAssertStatus = XASSERT_NONE; \ - } \ - else \ - { \ - XAssert(__FILE__, __LINE__); \ - XAssertStatus = XASSERT_OCCURRED; \ - return 0; \ - } \ -} - -/*****************************************************************************/ -/** -* Always assert. This assert macro is to be used for functions that do not -* return anything (void). Use for instances where an assert should always -* occur. -* -* @return Returns void unless the XWaitInAssert variable is true, in which case -* no return is made and an infinite loop is entered. -* -* @note None. -* -******************************************************************************/ -#define XASSERT_VOID_ALWAYS() \ -{ \ - XAssert(__FILE__, __LINE__); \ - XAssertStatus = XASSERT_OCCURRED; \ - return; \ -} - -/*****************************************************************************/ -/** -* Always assert. This assert macro is to be used for functions that do return -* a value. Use for instances where an assert should always occur. -* -* @return Returns void unless the XWaitInAssert variable is true, in which case -* no return is made and an infinite loop is entered. -* -* @note None. -* -******************************************************************************/ -#define XASSERT_NONVOID_ALWAYS() \ -{ \ - XAssert(__FILE__, __LINE__); \ - XAssertStatus = XASSERT_OCCURRED; \ - return 0; \ -} - - -#else - -#define XASSERT_VOID(expression) -#define XASSERT_VOID_ALWAYS() -#define XASSERT_NONVOID(expression) -#define XASSERT_NONVOID_ALWAYS() -#endif - -/************************** Function Prototypes ******************************/ - -void XAssertSetCallback(XAssertCallback Routine); -void XNullHandler(void *NullParameter); - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xbram.h b/software/LED_Controller_bsp/microblaze_mcs/include/xbram.h deleted file mode 100755 index 9182726..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xbram.h +++ /dev/null @@ -1,218 +0,0 @@ -/****************************************************************************** -* -* (c) Copyright 2006-2013 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* @file xbram.h -* -* 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 -* range constants. In this case there is no source code. -* -* If ECC is enabled, this file contains the software API definition of the -* Xilinx BRAM Interface Controller (XBram) device driver. -* -* The Xilinx BRAM controller is a soft IP core designed for Xilinx -* FPGAs and contains the following general features: -* - LMB v2.0 bus interfaces with byte enable support -* - Used in conjunction with bram_block peripheral to provide fast BRAM -* memory solution for MicroBlaze ILMB and DLMB ports -* - Supports byte, half-word, and word transfers -* - Supports optional BRAM error correction and detection. -* -* The driver provides interrupt management functions. Implementation of -* interrupt handlers is left to the user. Refer to the provided interrupt -* example in the examples directory for details. -* -* This driver is intended to be RTOS and processor independent. 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. -* -* Initialization & Configuration -* -* The XBram_Config structure is used by the driver to configure -* itself. This configuration structure is typically created by the tool-chain -* based on HW build properties. -* -* To support multiple runtime loading and initialization strategies employed -* by various operating systems, the driver instance can be initialized as -* follows: -* -* - XBram_CfgInitialize(InstancePtr, CfgPtr, EffectiveAddr) - -* Uses a configuration structure provided by the caller. If running in a -* system with address translation, the provided virtual memory base address -* replaces the physical address present in the configuration structure. -* -* @note -* -* This API utilizes 32 bit I/O to the BRAM registers. With less -* than 32 bits, the unused bits from registers are read as zero and written as -* don't cares. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 3.00a sa  05/11/10 Added ECC support
-* 3.01a sa  01/13/12  Changed Selftest API from
-*		      XBram_SelfTest(XBram *InstancePtr) to
-*		      XBram_SelfTest(XBram *InstancePtr, u8 IntMask) and
-*		      fixed a problem with interrupt generation for CR 639274
-*		      Modified Selftest example to return XST_SUCCESS when
-*		      ECC is not enabled and return XST_FAILURE when ECC is
-*		      enabled and Control Base Address is zero (CR 636581)
-*		      Modified Selftest to use correct CorrectableCounterBits
-*		      for CR 635655
-*		      Updated to check CorrectableFailingDataRegs in the case
-*		      of LMB BRAM.
-* 		      Added CorrectableFailingDataRegs and
-*		      UncorrectableFailingDataRegs to the config structure to
-*		      distinguish between AXI BRAM and LMB BRAM.
-*		      These registers are not present in the current version of
-*		      the AXI BRAM Controller.
-* 3.02a sa 04/16/12   Added test of byte and halfword read-modify-write
-* 3.02a sa 04/16/12   Modified driver tcl to sort the address parameters
-*  	       	      to support both xps and vivado designs.
-* 3.02a adk 24/4/13   Modified the tcl file to avoid warnings 
-*	       	      when ecc is disabled cr:705002.
-* 3.03a bss 05/22/13  Added Xil_DCacheFlushRange in xbram_selftest.c to
-*		      flush the Cache after writing to BRAM in InjectErrors
-*		      API(CR #719011)
-* 
-*****************************************************************************/ -#ifndef XBRAM_H /* prevent circular inclusions */ -#define XBRAM_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files ********************************/ - -#include "xil_types.h" -#include "xil_assert.h" -#include "xstatus.h" -#include "xbram_hw.h" - -/************************** Constant Definitions ****************************/ - - -/**************************** Type Definitions ******************************/ - -/** - * This typedef contains configuration information for the device. - */ -typedef struct { - u16 DeviceId; /**< Unique ID of device */ - u32 DataWidth; /**< BRAM data width */ - int EccPresent; /**< Is ECC supported in H/W */ - int FaultInjectionPresent; /**< Is Fault Injection - * supported in H/W */ - int CorrectableFailingRegisters; /**< Is Correctable Failing Registers - * supported in H/W */ - int CorrectableFailingDataRegs; /**< Is Correctable Failing Data - * Registers supported in H/W */ - int UncorrectableFailingRegisters; /**< Is Un-correctable Failing - * Registers supported in H/W */ - int UncorrectableFailingDataRegs; /**< Is Un-correctable Failing Data - * Registers supported in H/W */ - int EccStatusInterruptPresent; /**< Are ECC status and interrupts - * supported in H/W */ - int CorrectableCounterBits; /**< Number of bits in the - * Correctable Error Counter */ - int EccOnOffRegister; /**< Is ECC on/off register supported - * in h/w */ - int EccOnOffResetValue; /**< Reset value of the ECC on/off - * register in h/w */ - int WriteAccess; /**< Is write access enabled in - * 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.*/ -} XBram_Config; - -/** - * The XBram driver instance data. The user is required to - * allocate a variable of this type for every BRAM device in the - * system. A pointer to a variable of this type is then passed to the driver - * API functions. - */ -typedef struct { - XBram_Config Config; /* BRAM config structure */ - u32 IsReady; /* Device is initialized and ready */ -} XBram; - -/***************** Macros (Inline Functions) Definitions ********************/ - - -/************************** Function Prototypes *****************************/ - -/* - * Functions in xbram_sinit.c - */ -XBram_Config *XBram_LookupConfig(u16 DeviceId); - -/* - * Functions implemented in xbram.c - */ -int XBram_CfgInitialize(XBram *InstancePtr, XBram_Config *Config, - u32 EffectiveAddr); - -/* - * Functions implemented in xbram_selftest.c - */ -int XBram_SelfTest(XBram *InstancePtr, u8 IntMask); - -/* - * Functions implemented in xbram_intr.c - */ -void XBram_InterruptEnable(XBram *InstancePtr, u32 Mask); -void XBram_InterruptDisable(XBram *InstancePtr, u32 Mask); -void XBram_InterruptClear(XBram *InstancePtr, u32 Mask); -u32 XBram_InterruptGetEnabled(XBram *InstancePtr); -u32 XBram_InterruptGetStatus(XBram *InstancePtr); - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xbram_hw.h b/software/LED_Controller_bsp/microblaze_mcs/include/xbram_hw.h deleted file mode 100644 index bb584ef..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xbram_hw.h +++ /dev/null @@ -1,415 +0,0 @@ -/****************************************************************************** -* -* (c) Copyright 2011-2013 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xbram_hw.h -* -* This header file contains identifiers and 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. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00a sa   24/11/10 First release
-* 
-* -******************************************************************************/ -#ifndef XBRAM_HW_H /* prevent circular inclusions */ -#define XBRAM_HW_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ - -#include "xil_types.h" -#include "xil_assert.h" -#include "xil_io.h" - -/************************** Constant Definitions *****************************/ - -/** @name Registers - * - * Register offsets for this device. - * @{ - */ - -#define XBRAM_ECC_STATUS_OFFSET 0x0 /**< ECC status Register */ -#define XBRAM_ECC_EN_IRQ_OFFSET 0x4 /**< ECC interrupt enable Register */ -#define XBRAM_ECC_ON_OFF_OFFSET 0x8 /**< ECC on/off register */ -#define XBRAM_CE_CNT_OFFSET 0xC /**< Correctable error counter Register */ - -#define XBRAM_CE_FFD_0_OFFSET 0x100 /**< Correctable error first failing - * data Register, 31-0 */ -#define XBRAM_CE_FFD_1_OFFSET 0x104 /**< Correctable error first failing - * data Register, 63-32 */ -#define XBRAM_CE_FFD_2_OFFSET 0x108 /**< Correctable error first failing - * data Register, 95-64 */ -#define XBRAM_CE_FFD_3_OFFSET 0x10C /**< Correctable error first failing - * data Register, 127-96 */ -#define XBRAM_CE_FFD_4_OFFSET 0x110 /**< Correctable error first failing - * data Register, 159-128 */ -#define XBRAM_CE_FFD_5_OFFSET 0x114 /**< Correctable error first failing - * data Register, 191-160 */ -#define XBRAM_CE_FFD_6_OFFSET 0x118 /**< Correctable error first failing - * data Register, 223-192 */ -#define XBRAM_CE_FFD_7_OFFSET 0x11C /**< Correctable error first failing - * data Register, 255-224 */ -#define XBRAM_CE_FFD_8_OFFSET 0x120 /**< Correctable error first failing - * data Register, 287-256 */ -#define XBRAM_CE_FFD_9_OFFSET 0x124 /**< Correctable error first failing - * data Register, 319-288 */ -#define XBRAM_CE_FFD_10_OFFSET 0x128 /**< Correctable error first failing - * data Register, 351-320 */ -#define XBRAM_CE_FFD_11_OFFSET 0x12C /**< Correctable error first failing - * data Register, 383-352 */ -#define XBRAM_CE_FFD_12_OFFSET 0x130 /**< Correctable error first failing - * data Register, 415-384 */ -#define XBRAM_CE_FFD_13_OFFSET 0x134 /**< Correctable error first failing - * data Register, 447-416 */ -#define XBRAM_CE_FFD_14_OFFSET 0x138 /**< Correctable error first failing - * data Register, 479-448 */ -#define XBRAM_CE_FFD_15_OFFSET 0x13C /**< Correctable error first failing - * data Register, 511-480 */ -#define XBRAM_CE_FFD_16_OFFSET 0x140 /**< Correctable error first failing - * data Register, 543-512 */ -#define XBRAM_CE_FFD_17_OFFSET 0x144 /**< Correctable error first failing - * data Register, 575-544 */ -#define XBRAM_CE_FFD_18_OFFSET 0x148 /**< Correctable error first failing - * data Register, 607-576 */ -#define XBRAM_CE_FFD_19_OFFSET 0x14C /**< Correctable error first failing - * data Register, 639-608 */ -#define XBRAM_CE_FFD_20_OFFSET 0x150 /**< Correctable error first failing - * data Register, 671-640 */ -#define XBRAM_CE_FFD_21_OFFSET 0x154 /**< Correctable error first failing - * data Register, 703-672 */ -#define XBRAM_CE_FFD_22_OFFSET 0x158 /**< Correctable error first failing - * data Register, 735-704 */ -#define XBRAM_CE_FFD_23_OFFSET 0x15C /**< Correctable error first failing - * data Register, 767-736 */ -#define XBRAM_CE_FFD_24_OFFSET 0x160 /**< Correctable error first failing - * data Register, 799-768 */ -#define XBRAM_CE_FFD_25_OFFSET 0x164 /**< Correctable error first failing - * data Register, 831-800 */ -#define XBRAM_CE_FFD_26_OFFSET 0x168 /**< Correctable error first failing - * data Register, 863-832 */ -#define XBRAM_CE_FFD_27_OFFSET 0x16C /**< Correctable error first failing - * data Register, 895-864 */ -#define XBRAM_CE_FFD_28_OFFSET 0x170 /**< Correctable error first failing - * data Register, 927-896 */ -#define XBRAM_CE_FFD_29_OFFSET 0x174 /**< Correctable error first failing - * data Register, 959-928 */ -#define XBRAM_CE_FFD_30_OFFSET 0x178 /**< Correctable error first failing - * data Register, 991-960 */ -#define XBRAM_CE_FFD_31_OFFSET 0x17C /**< Correctable error first failing - * data Register, 1023-992 */ - -#define XBRAM_CE_FFE_0_OFFSET 0x180 /**< Correctable error first failing - * ECC Register, 31-0 */ -#define XBRAM_CE_FFE_1_OFFSET 0x184 /**< Correctable error first failing - * ECC Register, 63-32 */ -#define XBRAM_CE_FFE_2_OFFSET 0x188 /**< Correctable error first failing - * ECC Register, 95-64 */ -#define XBRAM_CE_FFE_3_OFFSET 0x18C /**< Correctable error first failing - * ECC Register, 127-96 */ -#define XBRAM_CE_FFE_4_OFFSET 0x190 /**< Correctable error first failing - * ECC Register, 159-128 */ -#define XBRAM_CE_FFE_5_OFFSET 0x194 /**< Correctable error first failing - * ECC Register, 191-160 */ -#define XBRAM_CE_FFE_6_OFFSET 0x198 /**< Correctable error first failing - * ECC Register, 223-192 */ -#define XBRAM_CE_FFE_7_OFFSET 0x19C /**< Correctable error first failing - * ECC Register, 255-224 */ - -#define XBRAM_CE_FFA_0_OFFSET 0x1C0 /**< Correctable error first failing - * address Register 31-0 */ -#define XBRAM_CE_FFA_1_OFFSET 0x1C4 /**< Correctable error first failing - * address Register 63-32 */ - -#define XBRAM_UE_FFD_0_OFFSET 0x200 /**< Uncorrectable error first failing - * data Register, 31-0 */ -#define XBRAM_UE_FFD_1_OFFSET 0x204 /**< Uncorrectable error first failing - * data Register, 63-32 */ -#define XBRAM_UE_FFD_2_OFFSET 0x208 /**< Uncorrectable error first failing - * data Register, 95-64 */ -#define XBRAM_UE_FFD_3_OFFSET 0x20C /**< Uncorrectable error first failing - * data Register, 127-96 */ -#define XBRAM_UE_FFD_4_OFFSET 0x210 /**< Uncorrectable error first failing - * data Register, 159-128 */ -#define XBRAM_UE_FFD_5_OFFSET 0x214 /**< Uncorrectable error first failing - * data Register, 191-160 */ -#define XBRAM_UE_FFD_6_OFFSET 0x218 /**< Uncorrectable error first failing - * data Register, 223-192 */ -#define XBRAM_UE_FFD_7_OFFSET 0x21C /**< Uncorrectable error first failing - * data Register, 255-224 */ -#define XBRAM_UE_FFD_8_OFFSET 0x220 /**< Uncorrectable error first failing - * data Register, 287-256 */ -#define XBRAM_UE_FFD_9_OFFSET 0x224 /**< Uncorrectable error first failing - * data Register, 319-288 */ -#define XBRAM_UE_FFD_10_OFFSET 0x228 /**< Uncorrectable error first failing - * data Register, 351-320 */ -#define XBRAM_UE_FFD_11_OFFSET 0x22C /**< Uncorrectable error first failing - * data Register, 383-352 */ -#define XBRAM_UE_FFD_12_OFFSET 0x230 /**< Uncorrectable error first failing - * data Register, 415-384 */ -#define XBRAM_UE_FFD_13_OFFSET 0x234 /**< Uncorrectable error first failing - * data Register, 447-416 */ -#define XBRAM_UE_FFD_14_OFFSET 0x238 /**< Uncorrectable error first failing - * data Register, 479-448 */ -#define XBRAM_UE_FFD_15_OFFSET 0x23C /**< Uncorrectable error first failing - * data Register, 511-480 */ -#define XBRAM_UE_FFD_16_OFFSET 0x240 /**< Uncorrectable error first failing - * data Register, 543-512 */ -#define XBRAM_UE_FFD_17_OFFSET 0x244 /**< Uncorrectable error first failing - * data Register, 575-544 */ -#define XBRAM_UE_FFD_18_OFFSET 0x248 /**< Uncorrectable error first failing - * data Register, 607-576 */ -#define XBRAM_UE_FFD_19_OFFSET 0x24C /**< Uncorrectable error first failing - * data Register, 639-608 */ -#define XBRAM_UE_FFD_20_OFFSET 0x250 /**< Uncorrectable error first failing - * data Register, 671-640 */ -#define XBRAM_UE_FFD_21_OFFSET 0x254 /**< Uncorrectable error first failing - * data Register, 703-672 */ -#define XBRAM_UE_FFD_22_OFFSET 0x258 /**< Uncorrectable error first failing - * data Register, 735-704 */ -#define XBRAM_UE_FFD_23_OFFSET 0x25C /**< Uncorrectable error first failing - * data Register, 767-736 */ -#define XBRAM_UE_FFD_24_OFFSET 0x260 /**< Uncorrectable error first failing - * data Register, 799-768 */ -#define XBRAM_UE_FFD_25_OFFSET 0x264 /**< Uncorrectable error first failing - * data Register, 831-800 */ -#define XBRAM_UE_FFD_26_OFFSET 0x268 /**< Uncorrectable error first failing - * data Register, 863-832 */ -#define XBRAM_UE_FFD_27_OFFSET 0x26C /**< Uncorrectable error first failing - * data Register, 895-864 */ -#define XBRAM_UE_FFD_28_OFFSET 0x270 /**< Uncorrectable error first failing - * data Register, 927-896 */ -#define XBRAM_UE_FFD_29_OFFSET 0x274 /**< Uncorrectable error first failing - * data Register, 959-928 */ -#define XBRAM_UE_FFD_30_OFFSET 0x278 /**< Uncorrectable error first failing - * data Register, 991-960 */ -#define XBRAM_UE_FFD_31_OFFSET 0x27C /**< Uncorrectable error first failing - * data Register, 1023-992 */ - -#define XBRAM_UE_FFE_0_OFFSET 0x280 /**< Uncorrectable error first failing - * ECC Register, 31-0 */ -#define XBRAM_UE_FFE_1_OFFSET 0x284 /**< Uncorrectable error first failing - * ECC Register, 63-32 */ -#define XBRAM_UE_FFE_2_OFFSET 0x288 /**< Uncorrectable error first failing - * ECC Register, 95-64 */ -#define XBRAM_UE_FFE_3_OFFSET 0x28C /**< Uncorrectable error first failing - * ECC Register, 127-96 */ -#define XBRAM_UE_FFE_4_OFFSET 0x290 /**< Uncorrectable error first failing - * ECC Register, 159-128 */ -#define XBRAM_UE_FFE_5_OFFSET 0x294 /**< Uncorrectable error first failing - * ECC Register, 191-160 */ -#define XBRAM_UE_FFE_6_OFFSET 0x298 /**< Uncorrectable error first failing - * ECC Register, 223-192 */ -#define XBRAM_UE_FFE_7_OFFSET 0x29C /**< Uncorrectable error first failing - * ECC Register, 255-224 */ - -#define XBRAM_UE_FFA_0_OFFSET 0x2C0 /**< Uncorrectable error first failing - * address Register 31-0 */ -#define XBRAM_UE_FFA_1_OFFSET 0x2C4 /**< Uncorrectable error first failing - * address Register 63-32 */ - -#define XBRAM_FI_D_0_OFFSET 0x300 /**< Fault injection Data Register, - * 31-0 */ -#define XBRAM_FI_D_1_OFFSET 0x304 /**< Fault injection Data Register, - * 63-32 */ -#define XBRAM_FI_D_2_OFFSET 0x308 /**< Fault injection Data Register, - * 95-64 */ -#define XBRAM_FI_D_3_OFFSET 0x30C /**< Fault injection Data Register, - * 127-96 */ -#define XBRAM_FI_D_4_OFFSET 0x310 /**< Fault injection Data Register, - * 159-128 */ -#define XBRAM_FI_D_5_OFFSET 0x314 /**< Fault injection Data Register, - * 191-160 */ -#define XBRAM_FI_D_6_OFFSET 0x318 /**< Fault injection Data Register, - * 223-192 */ -#define XBRAM_FI_D_7_OFFSET 0x31C /**< Fault injection Data Register, - * 255-224 */ -#define XBRAM_FI_D_8_OFFSET 0x320 /**< Fault injection Data Register, - * 287-256 */ -#define XBRAM_FI_D_9_OFFSET 0x324 /**< Fault injection Data Register, - * 319-288 */ -#define XBRAM_FI_D_10_OFFSET 0x328 /**< Fault injection Data Register, - * 351-320 */ -#define XBRAM_FI_D_11_OFFSET 0x32C /**< Fault injection Data Register, - * 383-352 */ -#define XBRAM_FI_D_12_OFFSET 0x330 /**< Fault injection Data Register, - * 415-384 */ -#define XBRAM_FI_D_13_OFFSET 0x334 /**< Fault injection Data Register, - * 447-416 */ -#define XBRAM_FI_D_14_OFFSET 0x338 /**< Fault injection Data Register, - * 479-448 */ -#define XBRAM_FI_D_15_OFFSET 0x33C /**< Fault injection Data Register, - * 511-480 */ -#define XBRAM_FI_D_16_OFFSET 0x340 /**< Fault injection Data Register, - * 543-512 */ -#define XBRAM_FI_D_17_OFFSET 0x344 /**< Fault injection Data Register, - * 575-544 */ -#define XBRAM_FI_D_18_OFFSET 0x348 /**< Fault injection Data Register, - * 607-576 */ -#define XBRAM_FI_D_19_OFFSET 0x34C /**< Fault injection Data Register, - * 639-608 */ -#define XBRAM_FI_D_20_OFFSET 0x350 /**< Fault injection Data Register, - * 671-640 */ -#define XBRAM_FI_D_21_OFFSET 0x354 /**< Fault injection Data Register, - * 703-672 */ -#define XBRAM_FI_D_22_OFFSET 0x358 /**< Fault injection Data Register, - * 735-704 */ -#define XBRAM_FI_D_23_OFFSET 0x35C /**< Fault injection Data Register, - * 767-736 */ -#define XBRAM_FI_D_24_OFFSET 0x360 /**< Fault injection Data Register, - * 799-768 */ -#define XBRAM_FI_D_25_OFFSET 0x364 /**< Fault injection Data Register, - * 831-800 */ -#define XBRAM_FI_D_26_OFFSET 0x368 /**< Fault injection Data Register, - * 863-832 */ -#define XBRAM_FI_D_27_OFFSET 0x36C /**< Fault injection Data Register, - * 895-864 */ -#define XBRAM_FI_D_28_OFFSET 0x370 /**< Fault injection Data Register, - * 927-896 */ -#define XBRAM_FI_D_29_OFFSET 0x374 /**< Fault injection Data Register, - * 959-928 */ -#define XBRAM_FI_D_30_OFFSET 0x378 /**< Fault injection Data Register, - * 991-960 */ -#define XBRAM_FI_D_31_OFFSET 0x37C /**< Fault injection Data Register, - * 1023-992 */ - -#define XBRAM_FI_ECC_0_OFFSET 0x380 /**< Fault injection ECC Register, - * 31-0 */ -#define XBRAM_FI_ECC_1_OFFSET 0x384 /**< Fault injection ECC Register, - * 63-32 */ -#define XBRAM_FI_ECC_2_OFFSET 0x388 /**< Fault injection ECC Register, - * 95-64 */ -#define XBRAM_FI_ECC_3_OFFSET 0x38C /**< Fault injection ECC Register, - * 127-96 */ -#define XBRAM_FI_ECC_4_OFFSET 0x390 /**< Fault injection ECC Register, - * 159-128 */ -#define XBRAM_FI_ECC_5_OFFSET 0x394 /**< Fault injection ECC Register, - * 191-160 */ -#define XBRAM_FI_ECC_6_OFFSET 0x398 /**< Fault injection ECC Register, - * 223-192 */ -#define XBRAM_FI_ECC_7_OFFSET 0x39C /**< Fault injection ECC Register, - * 255-224 */ - - -/* @} */ - -/** @name Interrupt Status and Enable Register bitmaps and masks - * - * Bit definitions for the ECC status register and ECC interrupt enable register. - * @{ - */ -#define XBRAM_IR_CE_MASK 0x2 /**< Mask for the correctable error */ -#define XBRAM_IR_UE_MASK 0x1 /**< Mask for the uncorrectable error */ -#define XBRAM_IR_ALL_MASK 0x3 /**< Mask of all bits */ -/*@}*/ - - -/**************************** Type Definitions *******************************/ - - -/***************** Macros (Inline Functions) Definitions *********************/ - -#define XBram_In32 Xil_In32 -#define XBram_Out32 Xil_Out32 - -#define XBram_In16 Xil_In16 -#define XBram_Out16 Xil_Out16 - -#define XBram_In8 Xil_In8 -#define XBram_Out8 Xil_Out8 - - -/****************************************************************************/ -/** -* -* Write a value to a BRAM register. A 32 bit write is performed. -* -* @param BaseAddress is the base address of the BRAM device register. -* @param RegOffset is the register offset from the base to write to. -* @param Data is the data written to the register. -* -* @return None. -* -* @note C-style signature: -* void XBram_WriteReg(u32 BaseAddress, u32 RegOffset, u32 Data) -* -****************************************************************************/ -#define XBram_WriteReg(BaseAddress, RegOffset, Data) \ - XBram_Out32((BaseAddress) + (RegOffset), (u32)(Data)) - -/****************************************************************************/ -/** -* -* Read a value from a BRAM register. A 32 bit read is performed. -* -* @param BaseAddress is the base address of the BRAM device registers. -* @param RegOffset is the register offset from the base to read from. -* -* @return Data read from the register. -* -* @note C-style signature: -* u32 XBram_ReadReg(u32 BaseAddress, u32 RegOffset) -* -****************************************************************************/ -#define XBram_ReadReg(BaseAddress, RegOffset) \ - XBram_In32((BaseAddress) + (RegOffset)) - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - - - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xdebug.h b/software/LED_Controller_bsp/microblaze_mcs/include/xdebug.h deleted file mode 100644 index 8ab5e21..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xdebug.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef XDEBUG -#define XDEBUG - -#undef DEBUG - -#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/software/LED_Controller_bsp/microblaze_mcs/include/xenv.h b/software/LED_Controller_bsp/microblaze_mcs/include/xenv.h deleted file mode 100755 index 27cb768..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xenv.h +++ /dev/null @@ -1,177 +0,0 @@ -/****************************************************************************** -* -* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" -* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND -* SOLUTIONS FOR XILINX DEVICES. 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. -* -* (c) Copyright 2002 Xilinx Inc. -* All rights reserved. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xenv.h -* -* Defines common services that are typically found in a host operating. -* environment. This include file simply includes an OS specific file based -* on the compile-time constant BUILD_ENV_*, where * is the name of the target -* environment. -* -* All services are defined as macros. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00b ch   10/24/02 Added XENV_LINUX
-* 1.00a rmm  04/17/02 First release
-* 
-* -******************************************************************************/ - -#ifndef XENV_H /* prevent circular inclusions */ -#define XENV_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Select which target environment we are operating under - */ - -/* VxWorks target environment */ -#if defined XENV_VXWORKS -#include "xenv_vxworks.h" - -/* Linux target environment */ -#elif defined XENV_LINUX -#include "xenv_linux.h" - -/* Unit test environment */ -#elif defined XENV_UNITTEST -#include "ut_xenv.h" - -/* Integration test environment */ -#elif defined XENV_INTTEST -#include "int_xenv.h" - -/* Standalone environment selected */ -#else -#include "xenv_standalone.h" -#endif - - -/* - * The following comments specify the types and macro wrappers that are - * expected to be defined by the target specific header files - */ - -/**************************** Type Definitions *******************************/ - -/*****************************************************************************/ -/** - * - * XENV_TIME_STAMP - * - * A structure that contains a time stamp used by other time stamp macros - * defined below. This structure is processor dependent. - */ - - -/***************** Macros (Inline Functions) Definitions *********************/ - -/*****************************************************************************/ -/** - * - * XENV_MEM_COPY(void *DestPtr, void *SrcPtr, unsigned Bytes) - * - * Copies a non-overlapping block of memory. - * - * @param DestPtr is the destination address to copy data to. - * @param SrcPtr is the source address to copy data from. - * @param Bytes is the number of bytes to copy. - * - * @return None - */ - -/*****************************************************************************/ -/** - * - * XENV_MEM_FILL(void *DestPtr, char Data, unsigned Bytes) - * - * Fills an area of memory with constant data. - * - * @param DestPtr is the destination address to set. - * @param Data contains the value to set. - * @param Bytes is the number of bytes to set. - * - * @return None - */ -/*****************************************************************************/ -/** - * - * XENV_TIME_STAMP_GET(XTIME_STAMP *StampPtr) - * - * Samples the processor's or external timer's time base counter. - * - * @param StampPtr is the storage for the retrieved time stamp. - * - * @return None - */ - -/*****************************************************************************/ -/** - * - * XENV_TIME_STAMP_DELTA_US(XTIME_STAMP *Stamp1Ptr, XTIME_STAMP* Stamp2Ptr) - * - * Computes the delta between the two time stamps. - * - * @param Stamp1Ptr - First sampled time stamp. - * @param Stamp1Ptr - Sedond sampled time stamp. - * - * @return An unsigned int value with units of microseconds. - */ - -/*****************************************************************************/ -/** - * - * XENV_TIME_STAMP_DELTA_MS(XTIME_STAMP *Stamp1Ptr, XTIME_STAMP* Stamp2Ptr) - * - * Computes the delta between the two time stamps. - * - * @param Stamp1Ptr - First sampled time stamp. - * @param Stamp1Ptr - Sedond sampled time stamp. - * - * @return An unsigned int value with units of milliseconds. - */ - -/*****************************************************************************//** - * - * XENV_USLEEP(unsigned delay) - * - * Delay the specified number of microseconds. - * - * @param delay is the number of microseconds to delay. - * - * @return None - */ - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ - diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xenv_none.h b/software/LED_Controller_bsp/microblaze_mcs/include/xenv_none.h deleted file mode 100755 index bc83786..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xenv_none.h +++ /dev/null @@ -1,41 +0,0 @@ -/****************************************************************************** -* -* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" -* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND -* SOLUTIONS FOR XILINX DEVICES. 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. -* -* (c) Copyright 2002 Xilinx Inc. -* All rights reserved. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xenv_none.h -* -* This is a legacy file kept for backwards compatibility. -* -* Please modify your code to #include "xenv_standalone.h" instead. -* -* -******************************************************************************/ - -#warning ******************************************************************** -#warning * -#warning * Use of xenv_none.h deprecated. -#warning * Please include the new xenv_standalone.h file instead. -#warning * -#warning ******************************************************************** - -#include "xenv_standalone.h" - diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xenv_standalone.h b/software/LED_Controller_bsp/microblaze_mcs/include/xenv_standalone.h deleted file mode 100644 index f2b2b68..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xenv_standalone.h +++ /dev/null @@ -1,356 +0,0 @@ -/****************************************************************************** -* -* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" -* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND -* SOLUTIONS FOR XILINX DEVICES. 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. -* -* (c) Copyright 2002-2008 Xilinx Inc. -* All rights reserved. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xenv_standalone.h -* -* Defines common services specified by xenv.h. -* -* @note -* This file is not intended to be included directly by driver code. -* Instead, the generic xenv.h file is intended to be included by driver -* code. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00a wgr  02/28/07 Added cache handling macros.
-* 1.00a wgr  02/27/07 Simplified code. Deprecated old-style macro names.
-* 1.00a rmm  01/24/06 Implemented XENV_USLEEP. Assume implementation is being
-*                     used under Xilinx standalone BSP.
-* 1.00a xd   11/03/04 Improved support for doxygen.
-* 1.00a rmm  03/21/02 First release
-* 1.00a wgr  03/22/07 Converted to new coding style.
-* 1.00a rpm  06/29/07 Added udelay macro for standalone
-* 1.00a xd   07/19/07 Included xparameters.h as XPAR_ constants are referred
-*                     to in MICROBLAZE section
-* 1.00a ecm  09/19/08 updated for v7.20 of Microblaze, new functionality
-*
-* 
-* -* -******************************************************************************/ - -#ifndef XENV_STANDALONE_H -#define XENV_STANDALONE_H - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ -/****************************************************************************** - * - * Get the processor dependent includes - * - ******************************************************************************/ - -#include - -#if defined __MICROBLAZE__ -# include "mb_interface.h" -# include "xparameters.h" /* XPAR constants used below in MB section */ - -#elif defined __PPC__ -# include "sleep.h" -# include "xcache_l.h" /* also include xcache_l.h for caching macros */ -#endif - -/****************************************************************************** - * - * MEMCPY / MEMSET related macros. - * - * The following are straight forward implementations of memset and memcpy. - * - * NOTE: memcpy may not work if source and target memory area are overlapping. - * - ******************************************************************************/ -/*****************************************************************************/ -/** - * - * Copies a non-overlapping block of memory. - * - * @param DestPtr - * Destination address to copy data to. - * - * @param SrcPtr - * Source address to copy data from. - * - * @param Bytes - * Number of bytes to copy. - * - * @return None. - * - * @note - * The use of XENV_MEM_COPY is deprecated. Use memcpy() instead. - * - * @note - * This implemention MAY BREAK work if source and target memory - * area are overlapping. - * - *****************************************************************************/ - -#define XENV_MEM_COPY(DestPtr, SrcPtr, Bytes) \ - memcpy((void *) DestPtr, (const void *) SrcPtr, (size_t) Bytes) - - - -/*****************************************************************************/ -/** - * - * Fills an area of memory with constant data. - * - * @param DestPtr - * Destination address to copy data to. - * - * @param Data - * Value to set. - * - * @param Bytes - * Number of bytes to copy. - * - * @return None. - * - * @note - * The use of XENV_MEM_FILL is deprecated. Use memset() instead. - * - *****************************************************************************/ - -#define XENV_MEM_FILL(DestPtr, Data, Bytes) \ - memset((void *) DestPtr, (int) Data, (size_t) Bytes) - - - -/****************************************************************************** - * - * TIME related macros - * - ******************************************************************************/ - -/** - * 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; - -/*****************************************************************************/ -/** - * - * Time is derived from the 64 bit PPC timebase register - * - * @param StampPtr is the storage for the retrieved time stamp. - * - * @return None. - * - * @note - * - * Signature: void XENV_TIME_STAMP_GET(XTIME_STAMP *StampPtr) - *

- * This macro must be implemented by the user. - * - *****************************************************************************/ -#define XENV_TIME_STAMP_GET(StampPtr) - -/*****************************************************************************/ -/** - * - * This macro is not yet implemented and always returns 0. - * - * @param Stamp1Ptr is the first sampled time stamp. - * @param Stamp2Ptr is the second sampled time stamp. - * - * @return 0 - * - * @note - * - * This macro must be implemented by the user. - * - *****************************************************************************/ -#define XENV_TIME_STAMP_DELTA_US(Stamp1Ptr, Stamp2Ptr) (0) - -/*****************************************************************************/ -/** - * - * This macro is not yet implemented and always returns 0. - * - * @param Stamp1Ptr is the first sampled time stamp. - * @param Stamp2Ptr is the second sampled time stamp. - * - * @return 0 - * - * @note - * - * This macro must be implemented by the user. - * - *****************************************************************************/ -#define XENV_TIME_STAMP_DELTA_MS(Stamp1Ptr, Stamp2Ptr) (0) - -/*****************************************************************************/ -/** - * XENV_USLEEP(unsigned delay) - * - * Delay the specified number of microseconds. Not implemented without OS - * support. - * - * @param delay - * Number of microseconds to delay. - * - * @return None. - * - *****************************************************************************/ - -#ifdef __PPC__ -#define XENV_USLEEP(delay) usleep(delay) -#define udelay(delay) usleep(delay) -#else -#define XENV_USLEEP(delay) -#define udelay(delay) -#endif - - -/****************************************************************************** - * - * CACHE handling macros / mappings - * - ******************************************************************************/ -/****************************************************************************** - * - * Processor independent macros - * - ******************************************************************************/ - -#define XCACHE_ENABLE_CACHE() \ - { XCACHE_ENABLE_DCACHE(); XCACHE_ENABLE_ICACHE(); } - -#define XCACHE_DISABLE_CACHE() \ - { XCACHE_DISABLE_DCACHE(); XCACHE_DISABLE_ICACHE(); } - - -/****************************************************************************** - * - * MicroBlaze case - * - * NOTE: Currently the following macros will only work on systems that contain - * only ONE MicroBlaze processor. Also, the macros will only be enabled if the - * system is built using a xparameters.h file. - * - ******************************************************************************/ - -#if defined __MICROBLAZE__ - -/* Check if MicroBlaze data cache was built into the core. - */ -#if (XPAR_MICROBLAZE_USE_DCACHE == 1) -# define XCACHE_ENABLE_DCACHE() microblaze_enable_dcache() -# define XCACHE_DISABLE_DCACHE() microblaze_disable_dcache() -# define XCACHE_INVALIDATE_DCACHE() microblaze_invalidate_dcache() - -# define XCACHE_INVALIDATE_DCACHE_RANGE(Addr, Len) \ - microblaze_invalidate_dcache_range((int)(Addr), (int)(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)) -#else -# define XCACHE_FLUSH_DCACHE() microblaze_invalidate_dcache() -# define XCACHE_FLUSH_DCACHE_RANGE(Addr, Len) \ - microblaze_invalidate_dcache_range((int)(Addr), (int)(Len)) -#endif /*XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK*/ - -#else -# define XCACHE_ENABLE_DCACHE() -# define XCACHE_DISABLE_DCACHE() -# define XCACHE_INVALIDATE_DCACHE_RANGE(Addr, Len) -# define XCACHE_FLUSH_DCACHE_RANGE(Addr, Len) -#endif /*XPAR_MICROBLAZE_USE_DCACHE*/ - - -/* Check if MicroBlaze instruction cache was built into the core. - */ -#if (XPAR_MICROBLAZE_USE_ICACHE == 1) -# define XCACHE_ENABLE_ICACHE() microblaze_enable_icache() -# define XCACHE_DISABLE_ICACHE() microblaze_disable_icache() - -# define XCACHE_INVALIDATE_ICACHE() microblaze_invalidate_icache() - -# define XCACHE_INVALIDATE_ICACHE_RANGE(Addr, Len) \ - microblaze_invalidate_icache_range((int)(Addr), (int)(Len)) - -#else -# define XCACHE_ENABLE_ICACHE() -# define XCACHE_DISABLE_ICACHE() -#endif /*XPAR_MICROBLAZE_USE_ICACHE*/ - - -/****************************************************************************** - * - * PowerPC case - * - * Note that the XCACHE_ENABLE_xxx functions are hardcoded to enable a - * specific memory region (0x80000001). Each bit (0-30) in the regions - * bitmask stands for 128MB of memory. Bit 31 stands for the upper 2GB - * range. - * - * regions --> cached address range - * ------------|-------------------------------------------------- - * 0x80000000 | [0, 0x7FFFFFF] - * 0x00000001 | [0xF8000000, 0xFFFFFFFF] - * 0x80000001 | [0, 0x7FFFFFF],[0xF8000000, 0xFFFFFFFF] - * - ******************************************************************************/ - -#elif defined __PPC__ - -#define XCACHE_ENABLE_DCACHE() XCache_EnableDCache(0x80000001) -#define XCACHE_DISABLE_DCACHE() XCache_DisableDCache() -#define XCACHE_ENABLE_ICACHE() XCache_EnableICache(0x80000001) -#define XCACHE_DISABLE_ICACHE() XCache_DisableICache() - -#define XCACHE_INVALIDATE_DCACHE_RANGE(Addr, Len) \ - XCache_InvalidateDCacheRange((unsigned int)(Addr), (unsigned)(Len)) - -#define XCACHE_FLUSH_DCACHE_RANGE(Addr, Len) \ - XCache_FlushDCacheRange((unsigned int)(Addr), (unsigned)(Len)) - -#define XCACHE_INVALIDATE_ICACHE() XCache_InvalidateICache() - - -/****************************************************************************** - * - * Unknown processor / architecture - * - ******************************************************************************/ - -#else -/* #error "Unknown processor / architecture. Must be MicroBlaze or PowerPC." */ -#endif - - -#ifdef __cplusplus -} -#endif - -#endif /* #ifndef XENV_STANDALONE_H */ - diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xenv_vxworks.h b/software/LED_Controller_bsp/microblaze_mcs/include/xenv_vxworks.h deleted file mode 100755 index 4269f10..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xenv_vxworks.h +++ /dev/null @@ -1,258 +0,0 @@ -/****************************************************************************** -* -* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" -* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND -* SOLUTIONS FOR XILINX DEVICES. 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. -* -* (c) Copyright 2002-2007 Xilinx Inc. -* All rights reserved. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xenv_vxworks.h -* -* Defines common services specified by xenv.h. -* -* @note -* This file is not intended to be included directly by driver code. -* Instead, the generic xenv.h file is intended to be included by driver -* code. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00a wgr  02/28/07 Added cache handling macros.
-* 1.00a wgr  02/27/07 Simplified code. Deprecated old-style macro names.
-* 1.00a xd   11/03/04 Improved support for doxygen.
-*       rmm  09/13/03 CR 177068: Fix compiler warning in XENV_MEM_FILL
-*       rmm  10/24/02 Added XENV_USLEEP macro
-* 1.00a rmm  07/16/01 First release
-* 1.10a wgr  03/22/07 Converted to new coding style.
-* 
-* -* -******************************************************************************/ - -#ifndef XENV_VXWORKS_H -#define XENV_VXWORKS_H - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ - -#include "xbasic_types.h" -#include "vxWorks.h" -#include "vxLib.h" -#include "sysLibExtra.h" -#include "cacheLib.h" -#include - -/*****************************************************************************/ -/** - * - * Copies a non-overlapping block of memory. - * - * @param DestPtr - * Destination address to copy data to. - * - * @param SrcPtr - * Source address to copy data from. - * - * @param Bytes - * Number of bytes to copy. - * - * @return None. - * - * @note XENV_MEM_COPY is deprecated. Use memcpy() instead. - * - *****************************************************************************/ - -#define XENV_MEM_COPY(DestPtr, SrcPtr, Bytes) \ - memcpy((void *) DestPtr, (const void *) SrcPtr, (size_t) Bytes) - - -/*****************************************************************************/ -/** - * - * Fills an area of memory with constant data. - * - * @param DestPtr - * Destination address to copy data to. - * - * @param Data - * Value to set. - * - * @param Bytes - * Number of bytes to copy. - * - * @return None. - * - * @note XENV_MEM_FILL is deprecated. Use memset() instead. - * - *****************************************************************************/ - -#define XENV_MEM_FILL(DestPtr, Data, Bytes) \ - memset((void *) DestPtr, (int) Data, (size_t) Bytes) - - -#if (CPU_FAMILY==PPC) -/** - * A structure that contains a time stamp used by other time stamp macros - * defined below. This structure is processor dependent. - */ -typedef struct -{ - u32 TimeBaseUpper; - u32 TimeBaseLower; -} XENV_TIME_STAMP; - -/*****************************************************************************/ -/** - * - * Time is derived from the 64 bit PPC timebase register - * - * @param StampPtr is the storage for the retrieved time stamp. - * - * @return None. - * - * @note - * - * Signature: void XENV_TIME_STAMP_GET(XTIME_STAMP *StampPtr) - * - *****************************************************************************/ -#define XENV_TIME_STAMP_GET(StampPtr) \ -{ \ - vxTimeBaseGet((UINT32*)&(StampPtr)->TimeBaseUpper, \ - (UINT32*)&(StampPtr)->TimeBaseLower); \ -} - -/*****************************************************************************/ -/** - * - * This macro is not yet implemented and always returns 0. - * - * @param Stamp1Ptr is the first sampled time stamp. - * @param Stamp2Ptr is the second sampled time stamp. - * - * @return 0 - * - * @note None. - * - *****************************************************************************/ -#define XENV_TIME_STAMP_DELTA_US(Stamp1Ptr, Stamp2Ptr) (0) - -/*****************************************************************************/ -/** - * - * This macro is not yet implemented and always returns 0. - * - * @param Stamp1Ptr is the first sampled time stamp. - * @param Stamp2Ptr is the second sampled time stamp. - * - * @return 0 - * - * @note - * - * None. - * - *****************************************************************************/ -#define XENV_TIME_STAMP_DELTA_MS(Stamp1Ptr, Stamp2Ptr) (0) - - -/* For non-PPC systems the above macros are not defined. Generate a error to - * make the developer aware of the problem. - */ -#else -#error "XENV_TIME_STAMP_GET used in a non-PPC system. Aborting." -#endif - - -/*****************************************************************************/ -/** - * - * Delay the specified number of microseconds. - * - * @param delay - * Number of microseconds to delay. - * - * @return None. - * - *****************************************************************************/ - -#define XENV_USLEEP(delay) sysUsDelay(delay) - -#define udelay(delay) sysUsDelay(delay) - - -/****************************************************************************** - * - * CACHE handling macros / mappings - * - ******************************************************************************/ -/****************************************************************************** - * - * PowerPC case - * - ******************************************************************************/ - -#if (CPU_FAMILY==PPC) - -#define XCACHE_ENABLE_CACHE() \ - { XCACHE_ENABLE_DCACHE(); XCACHE_ENABLE_ICACHE(); } - -#define XCACHE_DISABLE_CACHE() \ - { XCACHE_DISABLE_DCACHE(); XCACHE_DISABLE_ICACHE(); } - - -#define XCACHE_ENABLE_DCACHE() cacheEnable(DATA_CACHE) -#define XCACHE_DISABLE_DCACHE() cacheDisable(DATA_CACHE) -#define XCACHE_ENABLE_ICACHE() cacheEnable(INSTRUCTION_CACHE) -#define XCACHE_DISABLE_ICACHE() cacheDisable(INSTRUCTION_CACHE) - - -#define XCACHE_INVALIDATE_DCACHE_RANGE(Addr, Len) \ - cacheInvalidate(DATA_CACHE, (void *)(Addr), (Len)) - -#define XCACHE_FLUSH_DCACHE_RANGE(Addr, Len) \ - cacheFlush(DATA_CACHE, (void *)(Addr), (Len)) - -#define XCACHE_INVALIDATE_ICACHE_RANGE(Addr, Len) \ - cacheInvalidate(INSTRUCTION_CACHE, (void *)(Addr), (Len)) - -#define XCACHE_FLUSH_ICACHE_RANGE(Addr, Len) \ - cacheFlush(INSTRUCTION_CACHE, (void *)(Addr), (Len)) - - -/****************************************************************************** - * - * Unknown processor / architecture - * - ******************************************************************************/ - -#else -#error "Unknown processor / architecture. Must be PPC for VxWorks." -#endif - - -#ifdef __cplusplus -} -#endif - -#endif /* #ifdef XENV_VXWORKS_H */ - diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xil_assert.h b/software/LED_Controller_bsp/microblaze_mcs/include/xil_assert.h deleted file mode 100755 index 419492f..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xil_assert.h +++ /dev/null @@ -1,195 +0,0 @@ -/****************************************************************************** -* -* (c) Copyright 2009 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xil_assert.h -* -* This file contains assert related functions. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who    Date   Changes
-* ----- ---- -------- -------------------------------------------------------
-* 1.00a hbm  07/14/09 First release
-* 
-* -******************************************************************************/ - -#ifndef XIL_ASSERT_H /* prevent circular inclusions */ -#define XIL_ASSERT_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - - -/***************************** Include Files *********************************/ - - -/************************** Constant Definitions *****************************/ - -#define XIL_ASSERT_NONE 0 -#define XIL_ASSERT_OCCURRED 1 - -extern unsigned int Xil_AssertStatus; -extern void Xil_Assert(const char *, int); - - -/** - * 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); - -/***************** Macros (Inline Functions) Definitions *********************/ - -#ifndef NDEBUG - -/*****************************************************************************/ -/** -* This assert macro is to be used for functions that do not return anything -* (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 -* false, the assert occurs. -* -* @return Returns void unless the Xil_AssertWait variable is true, in which -* case no return is made and an infinite loop is entered. -* -* @note None. -* -******************************************************************************/ -#define Xil_AssertVoid(Expression) \ -{ \ - if (Expression) { \ - Xil_AssertStatus = XIL_ASSERT_NONE; \ - } else { \ - Xil_Assert(__FILE__, __LINE__); \ - Xil_AssertStatus = XIL_ASSERT_OCCURRED; \ - return; \ - } \ -} - -/*****************************************************************************/ -/** -* This assert macro is to be used for functions that do return a value. 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 false, -* the assert occurs. -* -* @return Returns 0 unless the Xil_AssertWait variable is true, in which -* case no return is made and an infinite loop is entered. -* -* @note None. -* -******************************************************************************/ -#define Xil_AssertNonvoid(Expression) \ -{ \ - if (Expression) { \ - Xil_AssertStatus = XIL_ASSERT_NONE; \ - } else { \ - Xil_Assert(__FILE__, __LINE__); \ - Xil_AssertStatus = XIL_ASSERT_OCCURRED; \ - return 0; \ - } \ -} - -/*****************************************************************************/ -/** -* Always assert. This assert macro is to be used for functions that do not -* return anything (void). Use for instances where an assert should always -* occur. -* -* @return Returns void unless the Xil_AssertWait variable is true, in which -* case no return is made and an infinite loop is entered. -* -* @note None. -* -******************************************************************************/ -#define Xil_AssertVoidAlways() \ -{ \ - Xil_Assert(__FILE__, __LINE__); \ - Xil_AssertStatus = XIL_ASSERT_OCCURRED; \ - return; \ -} - -/*****************************************************************************/ -/** -* Always assert. This assert macro is to be used for functions that do return -* a value. Use for instances where an assert should always occur. -* -* @return Returns void unless the Xil_AssertWait variable is true, in which -* case no return is made and an infinite loop is entered. -* -* @note None. -* -******************************************************************************/ -#define Xil_AssertNonvoidAlways() \ -{ \ - Xil_Assert(__FILE__, __LINE__); \ - Xil_AssertStatus = XIL_ASSERT_OCCURRED; \ - return 0; \ -} - - -#else - -#define Xil_AssertVoid(Expression) -#define Xil_AssertVoidAlways() -#define Xil_AssertNonvoid(Expression) -#define Xil_AssertNonvoidAlways() - -#endif - -/************************** Function Prototypes ******************************/ - -void Xil_AssertSetCallback(Xil_AssertCallback Routine); - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xil_cache.h b/software/LED_Controller_bsp/microblaze_mcs/include/xil_cache.h deleted file mode 100755 index b969fc8..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xil_cache.h +++ /dev/null @@ -1,456 +0,0 @@ -/****************************************************************************** -* -* (c) Copyright 2009-2013 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xil_cache.h -* -* This header file contains cache related 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. -* The functions in this header file can be used across all Xilinx supported -* processors. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -------------------------------------------------------
-* 1.00  hbm  07/28/09 Initial release
-* 3.02a sdm  10/24/11 Updated the file to include xparameters.h so that
-*                     the correct cache flush routines are used based on
-*                     whether the write-back or write-through caches are
-*                     used (cr #630532).
-* 3.10a asa  05/04/13 This version of MicroBlaze BSP adds support for system
-*					  cache/L2 cache. The existing/old APIs/macros in this
-*					  file are renamed to imply that they deal with L1 cache.
-*					  New macros/APIs are added to address similar features for
-*					  L2 cache. Users can include this file in their application
-*					  to use the various cache related APIs. These changes are
-*					  done for implementing PR #697214.
-*
-* 
-* -* @note -* -* None. -* -******************************************************************************/ - -#ifndef XIL_CACHE_H -#define XIL_CACHE_H - -#if defined XENV_VXWORKS -/* VxWorks environment */ -#error "Unknown processor / architecture. Must be PPC for VxWorks." -#else -/* standalone environment */ - -#include "mb_interface.h" -#include "xil_types.h" -#include "xparameters.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************************/ -/** -* -* Invalidate the entire L1 data cache. If the cacheline is modified (dirty), -* the modified contents are lost. -* -* @param None. -* -* @return None. -* -* @note -* -* Processor must be in real mode. -****************************************************************************/ -#define Xil_L1DCacheInvalidate() microblaze_invalidate_dcache() - -/****************************************************************************/ -/** -* -* Invalidate the entire L2 data cache. If the cacheline is modified (dirty), -* the modified contents are lost. -* -* @param None. -* -* @return None. -* -* @note -* -* Processor must be in real mode. -****************************************************************************/ -#define Xil_L2CacheInvalidate() microblaze_invalidate_cache_ext() - -/****************************************************************************/ -/** -* -* Invalidate the L1 data cache for the given address range. -* If the bytes specified by the address (Addr) are cached by the L1 data cache, -* the cacheline containing that byte is invalidated. If the cacheline -* is modified (dirty), the modified contents are lost. -* -* @param Addr is address of ragne to be invalidated. -* @param Len is the length in bytes to be invalidated. -* -* @return None. -* -* @note -* -* Processor must be in real mode. -****************************************************************************/ -#define Xil_L1DCacheInvalidateRange(Addr, Len) \ - microblaze_invalidate_dcache_range(Addr, Len) - -/****************************************************************************/ -/** -* -* Invalidate the L1 data cache for the given address range. -* If the bytes specified by the address (Addr) are cached by the L1 data cache, -* the cacheline containing that byte is invalidated. If the cacheline -* is modified (dirty), the modified contents are lost. -* -* @param Addr is address of ragne to be invalidated. -* @param Len is the length in bytes to be invalidated. -* -* @return None. -* -* @note -* -* Processor must be in real mode. -****************************************************************************/ -#define Xil_L2CacheInvalidateRange(Addr, Len) \ - microblaze_invalidate_cache_ext_range(Addr, Len) - -/****************************************************************************/ -/** -* Flush the L1 data cache for the given address range. -* If the bytes specified by the address (Addr) are cached by the data cache, -* and is modified (dirty), the cacheline will be written to system memory. -* The cacheline will also be invalidated. -* -* @param Addr is the starting address of the range to be flushed. -* @param Len is the length in byte to be flushed. -* -* @return None. -* -****************************************************************************/ -#if (XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK == 1) -# define Xil_L1DCacheFlushRange(Addr, Len) \ - microblaze_flush_dcache_range(Addr, Len) -#else -# define Xil_L1DCacheFlushRange(Addr, Len) \ - microblaze_invalidate_dcache_range(Addr, Len) -#endif /* XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK */ - -/****************************************************************************/ -/** -* Flush the L2 data cache for the given address range. -* If the bytes specified by the address (Addr) are cached by the data cache, -* and is modified (dirty), the cacheline will be written to system memory. -* The cacheline will also be invalidated. -* -* @param Addr is the starting address of the range to be flushed. -* @param Len is the length in byte to be flushed. -* -* @return None. -* -****************************************************************************/ -#define Xil_L2CacheFlushRange(Addr, Len) \ - microblaze_flush_cache_ext_range(Addr, Len) - -/****************************************************************************/ -/** -* Flush the entire L1 data cache. If any cacheline is dirty, the cacheline will be -* written to system memory. The entire data cache will be invalidated. -* -* @return None. -* -* @note -* -****************************************************************************/ -#if (XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK == 1) -# define Xil_L1DCacheFlush() microblaze_flush_dcache() -#else -# define Xil_L1DCacheFlush() microblaze_invalidate_dcache() -#endif /* XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK */ - -/****************************************************************************/ -/** -* Flush the entire L2 data cache. If any cacheline is dirty, the cacheline will be -* written to system memory. The entire data cache will be invalidated. -* -* @return None. -* -* @note -* -****************************************************************************/ -#define Xil_L2CacheFlush() microblaze_flush_cache_ext() - -/****************************************************************************/ -/** -* -* Invalidate the instruction cache for the given address range. -* -* @param Addr is address of ragne to be invalidated. -* @param Len is the length in bytes to be invalidated. -* -* @return None. -* -****************************************************************************/ -#define Xil_L1ICacheInvalidateRange(Addr, Len) \ - microblaze_invalidate_icache_range(Addr, Len) - -/****************************************************************************/ -/** -* -* Invalidate the entire instruction cache. -* -* @param None -* -* @return None. -* -****************************************************************************/ -#define Xil_L1ICacheInvalidate() \ - microblaze_invalidate_icache() - - -/****************************************************************************/ -/** -* -* Enable the L1 data cache. -* -* @return None. -* -* @note This is processor specific. -* -****************************************************************************/ -#define Xil_L1DCacheEnable() \ - microblaze_enable_dcache() - -/****************************************************************************/ -/** -* -* Disable the L1 data cache. -* -* @return None. -* -* @note This is processor specific. -* -****************************************************************************/ -#define Xil_L1DCacheDisable() \ - microblaze_disable_dcache() - -/****************************************************************************/ -/** -* -* Enable the instruction cache. -* -* @return None. -* -* @note This is processor specific. -* -****************************************************************************/ -#define Xil_L1ICacheEnable() \ - microblaze_enable_icache() - -/****************************************************************************/ -/** -* -* Disable the L1 Instruction cache. -* -* @return None. -* -* @note This is processor specific. -* -****************************************************************************/ -#define Xil_L1ICacheDisable() \ - microblaze_disable_icache() - -/****************************************************************************/ -/** -* -* Enable the data cache. -* -* @param None -* -* @return None. -* -****************************************************************************/ -#define Xil_DCacheEnable() Xil_L1DCacheEnable() - -/****************************************************************************/ -/** -* -* Enable the instruction cache. -* -* @param None -* -* @return None. -* -* @note -* -* -****************************************************************************/ -#define Xil_ICacheEnable() Xil_L1ICacheEnable() - -/**************************************************************************** -* -* Invalidate the entire Data cache. -* -* @param None. -* -* @return None. -* -* @note None. -* -****************************************************************************/ -#define Xil_DCacheInvalidate() \ - Xil_L2CacheInvalidate(); \ - Xil_L1DCacheInvalidate(); - - -/**************************************************************************** -* -* Invalidate the Data cache for the given address range. -* If the bytes specified by the address (adr) are cached by the Data cache, -* the cacheline containing that byte is invalidated. If the cacheline -* is modified (dirty), the modified contents are lost and are NOT -* written to system memory before the line is invalidated. -* -* @param Start address of ragne to be invalidated. -* @param Length of range to be invalidated in bytes. -* -* @return None. -* -* @note None. -* -****************************************************************************/ -#define Xil_DCacheInvalidateRange(Addr, Len) \ - Xil_L2CacheInvalidateRange(Addr, Len); \ - Xil_L1DCacheInvalidateRange(Addr, Len); - - -/**************************************************************************** -* -* Flush the entire Data cache. -* -* @param None. -* -* @return None. -* -* @note None. -* -****************************************************************************/ -#define Xil_DCacheFlush() \ - Xil_L2CacheFlush(); \ - Xil_L1DCacheFlush(); - -/**************************************************************************** -* Flush the Data cache for the given address range. -* If the bytes specified by the address (adr) are cached by the Data cache, -* the cacheline containing that byte is invalidated. If the cacheline -* is modified (dirty), the written to system memory first before the -* before the line is invalidated. -* -* @param Start address of range to be flushed. -* @param Length of range to be flushed in bytes. -* -* @return None. -* -* @note None. -* -****************************************************************************/ -#define Xil_DCacheFlushRange(Addr, Len) \ - Xil_L2CacheFlushRange(Addr, Len); \ - Xil_L1DCacheFlushRange(Addr, Len); - - -/**************************************************************************** -* -* Invalidate the entire instruction cache. -* -* @param None. -* -* @return None. -* -* @note None. -* -****************************************************************************/ -#define Xil_ICacheInvalidate() \ - Xil_L2CacheInvalidate(); \ - Xil_L1ICacheInvalidate(); - - -/**************************************************************************** -* -* Invalidate the instruction cache for the given address range. -* If the bytes specified by the address (adr) are cached by the Data cache, -* the cacheline containing that byte is invalidated. If the cacheline -* is modified (dirty), the modified contents are lost and are NOT -* written to system memory before the line is invalidated. -* -* @param Start address of ragne to be invalidated. -* @param Length of range to be invalidated in bytes. -* -* @return None. -* -* @note None. -* -****************************************************************************/ -#define Xil_ICacheInvalidateRange(Addr, Len) \ - Xil_L2CacheInvalidateRange(Addr, Len); \ - Xil_L1ICacheInvalidateRange(Addr, Len); - -void Xil_DCacheDisable(void); -void Xil_ICacheDisable(void); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xil_cache_vxworks.h b/software/LED_Controller_bsp/microblaze_mcs/include/xil_cache_vxworks.h deleted file mode 100755 index 3ad8965..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xil_cache_vxworks.h +++ /dev/null @@ -1,103 +0,0 @@ -/****************************************************************************** -* -* (c) Copyright 2009 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xil_cache_vxworks.h -* -* Contains the cache related functions for VxWorks that is wrapped by -* xil_cache. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date	 Changes
-* ----- ---- -------- -------------------------------------------------------
-* 1.00a hbm  12/11/09 Initial release
-*
-* 
-* -* @note -* -******************************************************************************/ - -#ifndef XIL_CACHE_VXWORKS_H -#define XIL_CACHE_VXWORKS_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "vxWorks.h" -#include "vxLib.h" -#include "sysLibExtra.h" -#include "cacheLib.h" - -#if (CPU_FAMILY==PPC) - -#define Xil_DCacheEnable() cacheEnable(DATA_CACHE) - -#define Xil_DCacheDisable() cacheDisable(DATA_CACHE) - -#define Xil_DCacheInvalidateRange(Addr, Len) \ - cacheInvalidate(DATA_CACHE, (void *)(Addr), (Len)) - -#define Xil_DCacheFlushRange(Addr, Len) \ - cacheFlush(DATA_CACHE, (void *)(Addr), (Len)) - -#define Xil_ICacheEnable() cacheEnable(INSTRUCTION_CACHE) - -#define Xil_ICacheDisable() cacheDisable(INSTRUCTION_CACHE) - -#define Xil_ICacheInvalidateRange(Addr, Len) \ - cacheInvalidate(INSTRUCTION_CACHE, (void *)(Addr), (Len)) - - -#else -#error "Unknown processor / architecture. Must be PPC for VxWorks." -#endif - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xil_exception.h b/software/LED_Controller_bsp/microblaze_mcs/include/xil_exception.h deleted file mode 100755 index de8f302..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xil_exception.h +++ /dev/null @@ -1,128 +0,0 @@ -/****************************************************************************** -* -* (c) Copyright 2009-2011 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xil_exception.h -* -* This header file contains exception related 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. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -------------------------------------------------------
-* 1.00  hbm  07/28/09 Initial release
-*
-* 
-* -* @note -* -* None. -* -******************************************************************************/ - -#ifndef XIL_EXCEPTION_H /* prevent circular inclusions */ -#define XIL_EXCEPTION_H /* by using protection macros */ - -#include "xil_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/************************** Constant Definitions *****************************/ - -/* - * 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_LAST XIL_EXCEPTION_ID_MMU - -/* - * XIL_EXCEPTION_ID_INT is defined for all processors, but with different value. - */ -#define XIL_EXCEPTION_ID_INT 16 /** - * exception ID for interrupt - */ - -/**************************** Type Definitions *******************************/ - -/** - * This typedef is the exception handler function. - */ -typedef void (*Xil_ExceptionHandler)(void *Data); - - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - -extern void Xil_ExceptionRegisterHandler(u32 Id, - Xil_ExceptionHandler Handler, - void *Data); - -extern void Xil_ExceptionRemoveHandler(u32 Id); - -extern void Xil_ExceptionInit(void); -extern void Xil_ExceptionEnable(void); -extern void Xil_ExceptionDisable(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xil_hal.h b/software/LED_Controller_bsp/microblaze_mcs/include/xil_hal.h deleted file mode 100755 index b58c7eb..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xil_hal.h +++ /dev/null @@ -1,71 +0,0 @@ -/****************************************************************************** -* -* (c) Copyright 2009 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xil_hal.h -* -* Contains all the HAL header files. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date	 Changes
-* ----- ---- -------- -------------------------------------------------------
-* 1.00a hbm  07/28/09 Initial release
-*
-* 
-* -* @note -* -******************************************************************************/ - -#ifndef XIL_HAL_H -#define XIL_HAL_H - -#include "xil_cache.h" -#include "xil_io.h" -#include "xil_assert.h" -#include "xil_exception.h" -#include "xil_types.h" - -#endif - diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xil_io.h b/software/LED_Controller_bsp/microblaze_mcs/include/xil_io.h deleted file mode 100755 index b2ae7f8..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xil_io.h +++ /dev/null @@ -1,366 +0,0 @@ -/****************************************************************************** -* -* (c) Copyright 2009-2011 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xil_io.h -* -* This file contains the interface for the general IO component, which -* encapsulates the Input/Output functions for processors that do not -* require any special I/O handling. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -------------------------------------------------------
-* 3.00a hbm  07/28/09 Initial release
-* 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
-*
-* 
-* -* @note -* -* This file may contain architecture-dependent items. -* -******************************************************************************/ - -#ifndef XIL_IO_H /* prevent circular inclusions */ -#define XIL_IO_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ - -#include "xil_types.h" -#include "mb_interface.h" -#include "xil_printf.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -#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. - */ - -/*****************************************************************************/ -/** -* -* Perform an input operation for an 8-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. -* -* @return The value read from the specified input address. -* -* @note None. -* -******************************************************************************/ -#define Xil_In8(Addr) (*(volatile u8 *)(Addr)) - -/*****************************************************************************/ -/** -* -* Perform an input operation for a 16-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. -* -* @return The value read from the specified input address. -* -* @note None. -* -******************************************************************************/ -#define Xil_In16(Addr) (*(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. -* -* @param Addr contains the address to perform the input operation at. -* -* @return The value read from the specified input address. -* -* @note None. -* -******************************************************************************/ -#define Xil_In32(Addr) (*(volatile u32 *)(Addr)) - - -/*****************************************************************************/ -/** -* -* Perform an output operation for an 8-bit memory location by writing the -* specified value to the specified address. -* -* @param Addr contains the address to perform the output operation at. -* @param value contains the value to be output at the specified address. -* -* @return None -* -* @note None. -* -******************************************************************************/ -#define Xil_Out8(Addr, Value) \ - (*(volatile u8 *)((Addr)) = (Value)) - -/*****************************************************************************/ -/** -* -* Perform an output operation for a 16-bit memory location by writing the -* specified value to the specified address. -* -* @param Addr contains the address to perform the output operation at. -* @param value contains the value to be output at the specified address. -* -* @return None -* -* @note None. -* -******************************************************************************/ -#define Xil_Out16(Addr, Value) \ - (*(volatile u16 *)((Addr)) = (Value)) - -/*****************************************************************************/ -/** -* -* Perform an output operation for a 32-bit memory location by writing the -* specified value to the specified address. -* -* @param addr contains the address to perform the output operation at. -* @param value contains the value to be output at the specified address. -* -* @return None -* -* @note None. -* -******************************************************************************/ -#define Xil_Out32(Addr, Value) \ - (*(volatile u32 *)((Addr)) = (Value)) - - -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); - -/** -* -* Perform an big-endian input operation for a 16-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. -* -* @return The value read from the specified input address with the -* proper endianness. The return value has the same endianness -* as that of the processor, i.e. if the processor is -* little-engian, the return value is the byte-swapped value read -* from the address. -* -* @note None. -* -******************************************************************************/ -#define Xil_In16BE(Addr) Xil_In16(Addr) - -/** -* -* Perform a big-endian 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. -* -* @return The value read from the specified input address with the -* proper endianness. The return value has the same endianness -* as that of the processor, i.e. if the processor is -* little-engian, the return value is the byte-swapped value read -* from the address. -* -* -* @note None. -* -******************************************************************************/ -#define Xil_In32BE(Addr) Xil_In32(Addr) - -/*****************************************************************************/ -/** -* -* Perform a big-endian output operation for a 16-bit memory location -* by writing the specified value to the specified address. -* -* @param Addr contains the address to perform the output operation at. -* @param Value contains the value to be output at the specified address. -* The value has the same endianness as that of the processor. -* If the processor is little-endian, the byte-swapped value is -* written to the address. -* -* -* @return None -* -* @note None. -* -******************************************************************************/ -#define Xil_Out16BE(Addr, Value) Xil_Out16(Addr, Value) - -/*****************************************************************************/ -/** -* -* Perform a big-endian output operation for a 32-bit memory location -* by writing the specified value to the specified address. -* -* @param Addr contains the address to perform the output operation at. -* @param Value contains the value to be output at the specified address. -* The value has the same endianness as that of the processor. -* If the processor is little-endian, the byte-swapped value is -* written to the address. -* -* @return None -* -* @note None. -* -******************************************************************************/ -#define Xil_Out32BE(Addr, Value) Xil_Out32(Addr, Value) - -#define Xil_Htonl(Data) (Data) -#define Xil_Htons(Data) (Data) -#define Xil_Ntohl(Data) (Data) -#define Xil_Ntohs(Data) (Data) - -#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); - -#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) - - -/*****************************************************************************/ -/** -* -* Convert a 32-bit number from host byte order to network byte order. -* -* @param Data the 32-bit number to be converted. -* -* @return The converted 32-bit number in network byte order. -* -* @note None. -* -******************************************************************************/ -#define Xil_Htonl(Data) Xil_EndianSwap32(Data) - -/*****************************************************************************/ -/** -* -* Convert a 16-bit number from host byte order to network byte order. -* -* @param Data the 16-bit number to be converted. -* -* @return The converted 16-bit number in network byte order. -* -* @note None. -* -******************************************************************************/ -#define Xil_Htons(Data) Xil_EndianSwap16(Data) - -/*****************************************************************************/ -/** -* -* Convert a 32-bit number from network byte order to host byte order. -* -* @param Value the 32-bit number to be converted. -* -* @return The converted 32-bit number in host byte order. -* -* @note None. -* -******************************************************************************/ -#define Xil_Ntohl(Data) Xil_EndianSwap32(Data) - -/*****************************************************************************/ -/** -* -* Convert a 16-bit number from network byte order to host byte order. -* -* @param Value the 16-bit number to be converted. -* -* @return The converted 16-bit number in host byte order. -* -* @note None. -* -******************************************************************************/ -#define Xil_Ntohs(Data) Xil_EndianSwap16(Data) - -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xil_macroback.h b/software/LED_Controller_bsp/microblaze_mcs/include/xil_macroback.h deleted file mode 100755 index c614daa..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xil_macroback.h +++ /dev/null @@ -1,1069 +0,0 @@ -/*********************************************************************/ -/** - * (c) Copyright 2010 Xilinx, Inc. All rights reserved. - * - * This file contains confidential and proprietary information - * of Xilinx, Inc. and is protected under U.S. and - * international copyright and other intellectual property - * laws. - * - * DISCLAIMER - * This disclaimer is not a license and does not grant any - * rights to the materials distributed herewith. Except as - * otherwise provided in a valid license issued to you by - * Xilinx, and to the maximum extent permitted by applicable - * law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND - * WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES - * AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING - * BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- - * INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and - * (2) Xilinx shall not be liable (whether in contract or tort, - * including negligence, or under any other theory of - * liability) for any loss or damage of any kind or nature - * related to, arising under or in connection with these - * materials, including for any direct, or any indirect, - * special, incidental, or consequential loss or damage - * (including loss of data, profits, goodwill, or any type of - * loss or damage suffered as a result of any action brought - * by a third party) even if such damage or loss was - * reasonably foreseeable or Xilinx had been advised of the - * possibility of the same. - * - * CRITICAL APPLICATIONS - * Xilinx products are not designed or intended to be fail- - * safe, or for use in any application requiring fail-safe - * performance, such as life-support or safety devices or - * systems, Class III medical devices, nuclear facilities, - * applications related to the deployment of airbags, or any - * other applications that could lead to death, personal - * injury, or severe property or environmental damage - * (individually and collectively, "Critical - * Applications"). Customer assumes the sole risk and - * liability of any use of Xilinx products in Critical - * Applications, subject only to applicable laws and - * regulations governing limitations on product liability. - * - * THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS - * PART OF THIS FILE AT ALL TIMES. - *********************************************************************/ - -/*********************************************************************/ -/** - * @file xil_macroback.h - * - * This header file is meant to bring back the removed _m macros. - * This header file must be included last. - * The following macros are not defined here due to the driver change: - * XGpio_mSetDataDirection - * XGpio_mGetDataReg - * XGpio_mSetDataReg - * XIIC_RESET - * XIIC_CLEAR_STATS - * XSpi_mReset - * XSysAce_mSetCfgAddr - * XSysAce_mIsCfgDone - * XTft_mSetPixel - * XTft_mGetPixel - * XWdtTb_mEnableWdt - * XWdtTb_mDisbleWdt - * XWdtTb_mRestartWdt - * XWdtTb_mGetTimebaseReg - * XWdtTb_mHasReset - * - * Please refer the corresonding driver document for replacement. - * - *********************************************************************/ - -#ifndef XIL_MACROBACK_H -#define XIL_MACROBACK_H - -/*********************************************************************/ -/** - * Macros for Driver XCan - * - *********************************************************************/ -#ifndef XCan_mReadReg -#define XCan_mReadReg XCan_ReadReg -#endif - -#ifndef XCan_mWriteReg -#define XCan_mWriteReg XCan_WriteReg -#endif - -#ifndef XCan_mIsTxDone -#define XCan_mIsTxDone XCan_IsTxDone -#endif - -#ifndef XCan_mIsTxFifoFull -#define XCan_mIsTxFifoFull XCan_IsTxFifoFull -#endif - -#ifndef XCan_mIsHighPriorityBufFull -#define XCan_mIsHighPriorityBufFull XCan_IsHighPriorityBufFull -#endif - -#ifndef XCan_mIsRxEmpty -#define XCan_mIsRxEmpty XCan_IsRxEmpty -#endif - -#ifndef XCan_mIsAcceptFilterBusy -#define XCan_mIsAcceptFilterBusy XCan_IsAcceptFilterBusy -#endif - -#ifndef XCan_mCreateIdValue -#define XCan_mCreateIdValue XCan_CreateIdValue -#endif - -#ifndef XCan_mCreateDlcValue -#define XCan_mCreateDlcValue XCan_CreateDlcValue -#endif - -/*********************************************************************/ -/** - * Macros for Driver XDmaCentral - * - *********************************************************************/ -#ifndef XDmaCentral_mWriteReg -#define XDmaCentral_mWriteReg XDmaCentral_WriteReg -#endif - -#ifndef XDmaCentral_mReadReg -#define XDmaCentral_mReadReg XDmaCentral_ReadReg -#endif - -/*********************************************************************/ -/** - * Macros for Driver XDsAdc - * - *********************************************************************/ -#ifndef XDsAdc_mWriteReg -#define XDsAdc_mWriteReg XDsAdc_WriteReg -#endif - -#ifndef XDsAdc_mReadReg -#define XDsAdc_mReadReg XDsAdc_ReadReg -#endif - -#ifndef XDsAdc_mIsEmpty -#define XDsAdc_mIsEmpty XDsAdc_IsEmpty -#endif - -#ifndef XDsAdc_mSetFstmReg -#define XDsAdc_mSetFstmReg XDsAdc_SetFstmReg -#endif - -#ifndef XDsAdc_mGetFstmReg -#define XDsAdc_mGetFstmReg XDsAdc_GetFstmReg -#endif - -#ifndef XDsAdc_mEnableConversion -#define XDsAdc_mEnableConversion XDsAdc_EnableConversion -#endif - -#ifndef XDsAdc_mDisableConversion -#define XDsAdc_mDisableConversion XDsAdc_DisableConversion -#endif - -#ifndef XDsAdc_mGetFifoOccyReg -#define XDsAdc_mGetFifoOccyReg XDsAdc_GetFifoOccyReg -#endif - -/*********************************************************************/ -/** - * Macros for Driver XDsDac - * - *********************************************************************/ -#ifndef XDsDac_mWriteReg -#define XDsDac_mWriteReg XDsDac_WriteReg -#endif - -#ifndef XDsDac_mReadReg -#define XDsDac_mReadReg XDsDac_ReadReg -#endif - -#ifndef XDsDac_mIsEmpty -#define XDsDac_mIsEmpty XDsDac_IsEmpty -#endif - -#ifndef XDsDac_mFifoIsFull -#define XDsDac_mFifoIsFull XDsDac_FifoIsFull -#endif - -#ifndef XDsDac_mGetVacancy -#define XDsDac_mGetVacancy XDsDac_GetVacancy -#endif - -/*********************************************************************/ -/** - * Macros for Driver XEmacLite - * - *********************************************************************/ -#ifndef XEmacLite_mReadReg -#define XEmacLite_mReadReg XEmacLite_ReadReg -#endif - -#ifndef XEmacLite_mWriteReg -#define XEmacLite_mWriteReg XEmacLite_WriteReg -#endif - -#ifndef XEmacLite_mGetTxStatus -#define XEmacLite_mGetTxStatus XEmacLite_GetTxStatus -#endif - -#ifndef XEmacLite_mSetTxStatus -#define XEmacLite_mSetTxStatus XEmacLite_SetTxStatus -#endif - -#ifndef XEmacLite_mGetRxStatus -#define XEmacLite_mGetRxStatus XEmacLite_GetRxStatus -#endif - -#ifndef XEmacLite_mSetRxStatus -#define XEmacLite_mSetRxStatus XEmacLite_SetRxStatus -#endif - -#ifndef XEmacLite_mIsTxDone -#define XEmacLite_mIsTxDone XEmacLite_IsTxDone -#endif - -#ifndef XEmacLite_mIsRxEmpty -#define XEmacLite_mIsRxEmpty XEmacLite_IsRxEmpty -#endif - -#ifndef XEmacLite_mNextTransmitAddr -#define XEmacLite_mNextTransmitAddr XEmacLite_NextTransmitAddr -#endif - -#ifndef XEmacLite_mNextReceiveAddr -#define XEmacLite_mNextReceiveAddr XEmacLite_NextReceiveAddr -#endif - -#ifndef XEmacLite_mIsMdioConfigured -#define XEmacLite_mIsMdioConfigured XEmacLite_IsMdioConfigured -#endif - -#ifndef XEmacLite_mIsLoopbackConfigured -#define XEmacLite_mIsLoopbackConfigured XEmacLite_IsLoopbackConfigured -#endif - -#ifndef XEmacLite_mGetReceiveDataLength -#define XEmacLite_mGetReceiveDataLength XEmacLite_GetReceiveDataLength -#endif - -#ifndef XEmacLite_mGetTxActive -#define XEmacLite_mGetTxActive XEmacLite_GetTxActive -#endif - -#ifndef XEmacLite_mSetTxActive -#define XEmacLite_mSetTxActive XEmacLite_SetTxActive -#endif - -/*********************************************************************/ -/** - * Macros for Driver XGpio - * - *********************************************************************/ -#ifndef XGpio_mWriteReg -#define XGpio_mWriteReg XGpio_WriteReg -#endif - -#ifndef XGpio_mReadReg -#define XGpio_mReadReg XGpio_ReadReg -#endif - -/*********************************************************************/ -/** - * Macros for Driver XHwIcap - * - *********************************************************************/ -#ifndef XHwIcap_mFifoWrite -#define XHwIcap_mFifoWrite XHwIcap_FifoWrite -#endif - -#ifndef XHwIcap_mFifoRead -#define XHwIcap_mFifoRead XHwIcap_FifoRead -#endif - -#ifndef XHwIcap_mSetSizeReg -#define XHwIcap_mSetSizeReg XHwIcap_SetSizeReg -#endif - -#ifndef XHwIcap_mGetControlReg -#define XHwIcap_mGetControlReg XHwIcap_GetControlReg -#endif - -#ifndef XHwIcap_mStartConfig -#define XHwIcap_mStartConfig XHwIcap_StartConfig -#endif - -#ifndef XHwIcap_mStartReadBack -#define XHwIcap_mStartReadBack XHwIcap_StartReadBack -#endif - -#ifndef XHwIcap_mGetStatusReg -#define XHwIcap_mGetStatusReg XHwIcap_GetStatusReg -#endif - -#ifndef XHwIcap_mIsTransferDone -#define XHwIcap_mIsTransferDone XHwIcap_IsTransferDone -#endif - -#ifndef XHwIcap_mIsDeviceBusy -#define XHwIcap_mIsDeviceBusy XHwIcap_IsDeviceBusy -#endif - -#ifndef XHwIcap_mIntrGlobalEnable -#define XHwIcap_mIntrGlobalEnable XHwIcap_IntrGlobalEnable -#endif - -#ifndef XHwIcap_mIntrGlobalDisable -#define XHwIcap_mIntrGlobalDisable XHwIcap_IntrGlobalDisable -#endif - -#ifndef XHwIcap_mIntrGetStatus -#define XHwIcap_mIntrGetStatus XHwIcap_IntrGetStatus -#endif - -#ifndef XHwIcap_mIntrDisable -#define XHwIcap_mIntrDisable XHwIcap_IntrDisable -#endif - -#ifndef XHwIcap_mIntrEnable -#define XHwIcap_mIntrEnable XHwIcap_IntrEnable -#endif - -#ifndef XHwIcap_mIntrGetEnabled -#define XHwIcap_mIntrGetEnabled XHwIcap_IntrGetEnabled -#endif - -#ifndef XHwIcap_mIntrClear -#define XHwIcap_mIntrClear XHwIcap_IntrClear -#endif - -#ifndef XHwIcap_mGetWrFifoVacancy -#define XHwIcap_mGetWrFifoVacancy XHwIcap_GetWrFifoVacancy -#endif - -#ifndef XHwIcap_mGetRdFifoOccupancy -#define XHwIcap_mGetRdFifoOccupancy XHwIcap_GetRdFifoOccupancy -#endif - -#ifndef XHwIcap_mSliceX2Col -#define XHwIcap_mSliceX2Col XHwIcap_SliceX2Col -#endif - -#ifndef XHwIcap_mSliceY2Row -#define XHwIcap_mSliceY2Row XHwIcap_SliceY2Row -#endif - -#ifndef XHwIcap_mSliceXY2Slice -#define XHwIcap_mSliceXY2Slice XHwIcap_SliceXY2Slice -#endif - -#ifndef XHwIcap_mReadReg -#define XHwIcap_mReadReg XHwIcap_ReadReg -#endif - -#ifndef XHwIcap_mWriteReg -#define XHwIcap_mWriteReg XHwIcap_WriteReg -#endif - -/*********************************************************************/ -/** - * Macros for Driver XIic - * - *********************************************************************/ -#ifndef XIic_mReadReg -#define XIic_mReadReg XIic_ReadReg -#endif - -#ifndef XIic_mWriteReg -#define XIic_mWriteReg XIic_WriteReg -#endif - -#ifndef XIic_mEnterCriticalRegion -#define XIic_mEnterCriticalRegion XIic_IntrGlobalDisable -#endif - -#ifndef XIic_mExitCriticalRegion -#define XIic_mExitCriticalRegion XIic_IntrGlobalEnable -#endif - -#ifndef XIIC_GINTR_DISABLE -#define XIIC_GINTR_DISABLE XIic_IntrGlobalDisable -#endif - -#ifndef XIIC_GINTR_ENABLE -#define XIIC_GINTR_ENABLE XIic_IntrGlobalEnable -#endif - -#ifndef XIIC_IS_GINTR_ENABLED -#define XIIC_IS_GINTR_ENABLED XIic_IsIntrGlobalEnabled -#endif - -#ifndef XIIC_WRITE_IISR -#define XIIC_WRITE_IISR XIic_WriteIisr -#endif - -#ifndef XIIC_READ_IISR -#define XIIC_READ_IISR XIic_ReadIisr -#endif - -#ifndef XIIC_WRITE_IIER -#define XIIC_WRITE_IIER XIic_WriteIier -#endif - -#ifndef XIic_mClearIisr -#define XIic_mClearIisr XIic_ClearIisr -#endif - -#ifndef XIic_mSend7BitAddress -#define XIic_mSend7BitAddress XIic_Send7BitAddress -#endif - -#ifndef XIic_mDynSend7BitAddress -#define XIic_mDynSend7BitAddress XIic_DynSend7BitAddress -#endif - -#ifndef XIic_mDynSendStartStopAddress -#define XIic_mDynSendStartStopAddress XIic_DynSendStartStopAddress -#endif - -#ifndef XIic_mDynSendStop -#define XIic_mDynSendStop XIic_DynSendStop -#endif - -#ifndef XIic_mSend10BitAddrByte1 -#define XIic_mSend10BitAddrByte1 XIic_Send10BitAddrByte1 -#endif - -#ifndef XIic_mSend10BitAddrByte2 -#define XIic_mSend10BitAddrByte2 XIic_Send10BitAddrByte2 -#endif - -#ifndef XIic_mSend7BitAddr -#define XIic_mSend7BitAddr XIic_Send7BitAddr -#endif - -#ifndef XIic_mDisableIntr -#define XIic_mDisableIntr XIic_DisableIntr -#endif - -#ifndef XIic_mEnableIntr -#define XIic_mEnableIntr XIic_EnableIntr -#endif - -#ifndef XIic_mClearIntr -#define XIic_mClearIntr XIic_ClearIntr -#endif - -#ifndef XIic_mClearEnableIntr -#define XIic_mClearEnableIntr XIic_ClearEnableIntr -#endif - -#ifndef XIic_mFlushRxFifo -#define XIic_mFlushRxFifo XIic_FlushRxFifo -#endif - -#ifndef XIic_mFlushTxFifo -#define XIic_mFlushTxFifo XIic_FlushTxFifo -#endif - -#ifndef XIic_mReadRecvByte -#define XIic_mReadRecvByte XIic_ReadRecvByte -#endif - -#ifndef XIic_mWriteSendByte -#define XIic_mWriteSendByte XIic_WriteSendByte -#endif - -#ifndef XIic_mSetControlRegister -#define XIic_mSetControlRegister XIic_SetControlRegister -#endif - -/*********************************************************************/ -/** - * Macros for Driver XIntc - * - *********************************************************************/ -#ifndef XIntc_mMasterEnable -#define XIntc_mMasterEnable XIntc_MasterEnable -#endif - -#ifndef XIntc_mMasterDisable -#define XIntc_mMasterDisable XIntc_MasterDisable -#endif - -#ifndef XIntc_mEnableIntr -#define XIntc_mEnableIntr XIntc_EnableIntr -#endif - -#ifndef XIntc_mDisableIntr -#define XIntc_mDisableIntr XIntc_DisableIntr -#endif - -#ifndef XIntc_mAckIntr -#define XIntc_mAckIntr XIntc_AckIntr -#endif - -#ifndef XIntc_mGetIntrStatus -#define XIntc_mGetIntrStatus XIntc_GetIntrStatus -#endif - -/*********************************************************************/ -/** - * Macros for Driver XLlDma - * - *********************************************************************/ -#ifndef XLlDma_mBdRead -#define XLlDma_mBdRead XLlDma_BdRead -#endif - -#ifndef XLlDma_mBdWrite -#define XLlDma_mBdWrite XLlDma_BdWrite -#endif - -#ifndef XLlDma_mWriteReg -#define XLlDma_mWriteReg XLlDma_WriteReg -#endif - -#ifndef XLlDma_mReadReg -#define XLlDma_mReadReg XLlDma_ReadReg -#endif - -#ifndef XLlDma_mBdClear -#define XLlDma_mBdClear XLlDma_BdClear -#endif - -#ifndef XLlDma_mBdSetStsCtrl -#define XLlDma_mBdSetStsCtrl XLlDma_BdSetStsCtrl -#endif - -#ifndef XLlDma_mBdGetStsCtrl -#define XLlDma_mBdGetStsCtrl XLlDma_BdGetStsCtrl -#endif - -#ifndef XLlDma_mBdSetLength -#define XLlDma_mBdSetLength XLlDma_BdSetLength -#endif - -#ifndef XLlDma_mBdGetLength -#define XLlDma_mBdGetLength XLlDma_BdGetLength -#endif - -#ifndef XLlDma_mBdSetId -#define XLlDma_mBdSetId XLlDma_BdSetId -#endif - -#ifndef XLlDma_mBdGetId -#define XLlDma_mBdGetId XLlDma_BdGetId -#endif - -#ifndef XLlDma_mBdSetBufAddr -#define XLlDma_mBdSetBufAddr XLlDma_BdSetBufAddr -#endif - -#ifndef XLlDma_mBdGetBufAddr -#define XLlDma_mBdGetBufAddr XLlDma_BdGetBufAddr -#endif - -#ifndef XLlDma_mBdGetLength -#define XLlDma_mBdGetLength XLlDma_BdGetLength -#endif - -#ifndef XLlDma_mGetTxRing -#define XLlDma_mGetTxRing XLlDma_GetTxRing -#endif - -#ifndef XLlDma_mGetRxRing -#define XLlDma_mGetRxRing XLlDma_GetRxRing -#endif - -#ifndef XLlDma_mGetCr -#define XLlDma_mGetCr XLlDma_GetCr -#endif - -#ifndef XLlDma_mSetCr -#define XLlDma_mSetCr XLlDma_SetCr -#endif - -#ifndef XLlDma_mBdRingCntCalc -#define XLlDma_mBdRingCntCalc XLlDma_BdRingCntCalc -#endif - -#ifndef XLlDma_mBdRingMemCalc -#define XLlDma_mBdRingMemCalc XLlDma_BdRingMemCalc -#endif - -#ifndef XLlDma_mBdRingGetCnt -#define XLlDma_mBdRingGetCnt XLlDma_BdRingGetCnt -#endif - -#ifndef XLlDma_mBdRingGetFreeCnt -#define XLlDma_mBdRingGetFreeCnt XLlDma_BdRingGetFreeCnt -#endif - -#ifndef XLlDma_mBdRingSnapShotCurrBd -#define XLlDma_mBdRingSnapShotCurrBd XLlDma_BdRingSnapShotCurrBd -#endif - -#ifndef XLlDma_mBdRingNext -#define XLlDma_mBdRingNext XLlDma_BdRingNext -#endif - -#ifndef XLlDma_mBdRingPrev -#define XLlDma_mBdRingPrev XLlDma_BdRingPrev -#endif - -#ifndef XLlDma_mBdRingGetSr -#define XLlDma_mBdRingGetSr XLlDma_BdRingGetSr -#endif - -#ifndef XLlDma_mBdRingSetSr -#define XLlDma_mBdRingSetSr XLlDma_BdRingSetSr -#endif - -#ifndef XLlDma_mBdRingGetCr -#define XLlDma_mBdRingGetCr XLlDma_BdRingGetCr -#endif - -#ifndef XLlDma_mBdRingSetCr -#define XLlDma_mBdRingSetCr XLlDma_BdRingSetCr -#endif - -#ifndef XLlDma_mBdRingBusy -#define XLlDma_mBdRingBusy XLlDma_BdRingBusy -#endif - -#ifndef XLlDma_mBdRingIntEnable -#define XLlDma_mBdRingIntEnable XLlDma_BdRingIntEnable -#endif - -#ifndef XLlDma_mBdRingIntDisable -#define XLlDma_mBdRingIntDisable XLlDma_BdRingIntDisable -#endif - -#ifndef XLlDma_mBdRingIntGetEnabled -#define XLlDma_mBdRingIntGetEnabled XLlDma_BdRingIntGetEnabled -#endif - -#ifndef XLlDma_mBdRingGetIrq -#define XLlDma_mBdRingGetIrq XLlDma_BdRingGetIrq -#endif - -#ifndef XLlDma_mBdRingAckIrq -#define XLlDma_mBdRingAckIrq XLlDma_BdRingAckIrq -#endif - -/*********************************************************************/ -/** - * Macros for Driver XMbox - * - *********************************************************************/ -#ifndef XMbox_mWriteReg -#define XMbox_mWriteReg XMbox_WriteReg -#endif - -#ifndef XMbox_mReadReg -#define XMbox_mReadReg XMbox_ReadReg -#endif - -#ifndef XMbox_mWriteMBox -#define XMbox_mWriteMBox XMbox_WriteMBox -#endif - -#ifndef XMbox_mReadMBox -#define XMbox_mReadMBox XMbox_ReadMBox -#endif - -#ifndef XMbox_mFSLReadMBox -#define XMbox_mFSLReadMBox XMbox_FSLReadMBox -#endif - -#ifndef XMbox_mFSLWriteMBox -#define XMbox_mFSLWriteMBox XMbox_FSLWriteMBox -#endif - -#ifndef XMbox_mFSLIsEmpty -#define XMbox_mFSLIsEmpty XMbox_FSLIsEmpty -#endif - -#ifndef XMbox_mFSLIsFull -#define XMbox_mFSLIsFull XMbox_FSLIsFull -#endif - -#ifndef XMbox_mIsEmpty -#define XMbox_mIsEmpty XMbox_IsEmptyHw -#endif - -#ifndef XMbox_mIsFull -#define XMbox_mIsFull XMbox_IsFullHw -#endif - -/*********************************************************************/ -/** - * Macros for Driver XMpmc - * - *********************************************************************/ -#ifndef XMpmc_mReadReg -#define XMpmc_mReadReg XMpmc_ReadReg -#endif - -#ifndef XMpmc_mWriteReg -#define XMpmc_mWriteReg XMpmc_WriteReg -#endif - -/*********************************************************************/ -/** - * Macros for Driver XMutex - * - *********************************************************************/ -#ifndef XMutex_mWriteReg -#define XMutex_mWriteReg XMutex_WriteReg -#endif - -#ifndef XMutex_mReadReg -#define XMutex_mReadReg XMutex_ReadReg -#endif - -/*********************************************************************/ -/** - * Macros for Driver XPcie - * - *********************************************************************/ -#ifndef XPcie_mReadReg -#define XPcie_mReadReg XPcie_ReadReg -#endif - -#ifndef XPcie_mWriteReg -#define XPcie_mWriteReg XPcie_WriteReg -#endif - -/*********************************************************************/ -/** - * Macros for Driver XSpi - * - *********************************************************************/ -#ifndef XSpi_mIntrGlobalEnable -#define XSpi_mIntrGlobalEnable XSpi_IntrGlobalEnable -#endif - -#ifndef XSpi_mIntrGlobalDisable -#define XSpi_mIntrGlobalDisable XSpi_IntrGlobalDisable -#endif - -#ifndef XSpi_mIsIntrGlobalEnabled -#define XSpi_mIsIntrGlobalEnabled XSpi_IsIntrGlobalEnabled -#endif - -#ifndef XSpi_mIntrGetStatus -#define XSpi_mIntrGetStatus XSpi_IntrGetStatus -#endif - -#ifndef XSpi_mIntrClear -#define XSpi_mIntrClear XSpi_IntrClear -#endif - -#ifndef XSpi_mIntrEnable -#define XSpi_mIntrEnable XSpi_IntrEnable -#endif - -#ifndef XSpi_mIntrDisable -#define XSpi_mIntrDisable XSpi_IntrDisable -#endif - -#ifndef XSpi_mIntrGetEnabled -#define XSpi_mIntrGetEnabled XSpi_IntrGetEnabled -#endif - -#ifndef XSpi_mSetControlReg -#define XSpi_mSetControlReg XSpi_SetControlReg -#endif - -#ifndef XSpi_mGetControlReg -#define XSpi_mGetControlReg XSpi_GetControlReg -#endif - -#ifndef XSpi_mGetStatusReg -#define XSpi_mGetStatusReg XSpi_GetStatusReg -#endif - -#ifndef XSpi_mSetSlaveSelectReg -#define XSpi_mSetSlaveSelectReg XSpi_SetSlaveSelectReg -#endif - -#ifndef XSpi_mGetSlaveSelectReg -#define XSpi_mGetSlaveSelectReg XSpi_GetSlaveSelectReg -#endif - -#ifndef XSpi_mEnable -#define XSpi_mEnable XSpi_Enable -#endif - -#ifndef XSpi_mDisable -#define XSpi_mDisable XSpi_Disable -#endif - -/*********************************************************************/ -/** - * Macros for Driver XSysAce - * - *********************************************************************/ -#ifndef XSysAce_mGetControlReg -#define XSysAce_mGetControlReg XSysAce_GetControlReg -#endif - -#ifndef XSysAce_mSetControlReg -#define XSysAce_mSetControlReg XSysAce_SetControlReg -#endif - -#ifndef XSysAce_mOrControlReg -#define XSysAce_mOrControlReg XSysAce_OrControlReg -#endif - -#ifndef XSysAce_mAndControlReg -#define XSysAce_mAndControlReg XSysAce_AndControlReg -#endif - -#ifndef XSysAce_mGetErrorReg -#define XSysAce_mGetErrorReg XSysAce_GetErrorReg -#endif - -#ifndef XSysAce_mGetStatusReg -#define XSysAce_mGetStatusReg XSysAce_GetStatusReg -#endif - -#ifndef XSysAce_mWaitForLock -#define XSysAce_mWaitForLock XSysAce_WaitForLock -#endif - -#ifndef XSysAce_mEnableIntr -#define XSysAce_mEnableIntr XSysAce_EnableIntr -#endif - -#ifndef XSysAce_mDisableIntr -#define XSysAce_mDisableIntr XSysAce_DisableIntr -#endif - -#ifndef XSysAce_mIsReadyForCmd -#define XSysAce_mIsReadyForCmd XSysAce_IsReadyForCmd -#endif - -#ifndef XSysAce_mIsMpuLocked -#define XSysAce_mIsMpuLocked XSysAce_IsMpuLocked -#endif - -#ifndef XSysAce_mIsIntrEnabled -#define XSysAce_mIsIntrEnabled XSysAce_IsIntrEnabled -#endif - -/*********************************************************************/ -/** - * Macros for Driver XSysMon - * - *********************************************************************/ -#ifndef XSysMon_mIsEventSamplingModeSet -#define XSysMon_mIsEventSamplingModeSet XSysMon_IsEventSamplingModeSet -#endif - -#ifndef XSysMon_mIsDrpBusy -#define XSysMon_mIsDrpBusy XSysMon_IsDrpBusy -#endif - -#ifndef XSysMon_mIsDrpLocked -#define XSysMon_mIsDrpLocked XSysMon_IsDrpLocked -#endif - -#ifndef XSysMon_mRawToTemperature -#define XSysMon_mRawToTemperature XSysMon_RawToTemperature -#endif - -#ifndef XSysMon_mRawToVoltage -#define XSysMon_mRawToVoltage XSysMon_RawToVoltage -#endif - -#ifndef XSysMon_mTemperatureToRaw -#define XSysMon_mTemperatureToRaw XSysMon_TemperatureToRaw -#endif - -#ifndef XSysMon_mVoltageToRaw -#define XSysMon_mVoltageToRaw XSysMon_VoltageToRaw -#endif - -#ifndef XSysMon_mReadReg -#define XSysMon_mReadReg XSysMon_ReadReg -#endif - -#ifndef XSysMon_mWriteReg -#define XSysMon_mWriteReg XSysMon_WriteReg -#endif - -/*********************************************************************/ -/** - * Macros for Driver XTmrCtr - * - *********************************************************************/ -#ifndef XTimerCtr_mReadReg -#define XTimerCtr_mReadReg XTimerCtr_ReadReg -#endif - -#ifndef XTmrCtr_mWriteReg -#define XTmrCtr_mWriteReg XTmrCtr_WriteReg -#endif - -#ifndef XTmrCtr_mSetControlStatusReg -#define XTmrCtr_mSetControlStatusReg XTmrCtr_SetControlStatusReg -#endif - -#ifndef XTmrCtr_mGetControlStatusReg -#define XTmrCtr_mGetControlStatusReg XTmrCtr_GetControlStatusReg -#endif - -#ifndef XTmrCtr_mGetTimerCounterReg -#define XTmrCtr_mGetTimerCounterReg XTmrCtr_GetTimerCounterReg -#endif - -#ifndef XTmrCtr_mSetLoadReg -#define XTmrCtr_mSetLoadReg XTmrCtr_SetLoadReg -#endif - -#ifndef XTmrCtr_mGetLoadReg -#define XTmrCtr_mGetLoadReg XTmrCtr_GetLoadReg -#endif - -#ifndef XTmrCtr_mEnable -#define XTmrCtr_mEnable XTmrCtr_Enable -#endif - -#ifndef XTmrCtr_mDisable -#define XTmrCtr_mDisable XTmrCtr_Disable -#endif - -#ifndef XTmrCtr_mEnableIntr -#define XTmrCtr_mEnableIntr XTmrCtr_EnableIntr -#endif - -#ifndef XTmrCtr_mDisableIntr -#define XTmrCtr_mDisableIntr XTmrCtr_DisableIntr -#endif - -#ifndef XTmrCtr_mLoadTimerCounterReg -#define XTmrCtr_mLoadTimerCounterReg XTmrCtr_LoadTimerCounterReg -#endif - -#ifndef XTmrCtr_mHasEventOccurred -#define XTmrCtr_mHasEventOccurred XTmrCtr_HasEventOccurred -#endif - -/*********************************************************************/ -/** - * Macros for Driver XUartLite - * - *********************************************************************/ -#ifndef XUartLite_mUpdateStats -#define XUartLite_mUpdateStats XUartLite_UpdateStats -#endif - -#ifndef XUartLite_mWriteReg -#define XUartLite_mWriteReg XUartLite_WriteReg -#endif - -#ifndef XUartLite_mReadReg -#define XUartLite_mReadReg XUartLite_ReadReg -#endif - -#ifndef XUartLite_mClearStats -#define XUartLite_mClearStats XUartLite_ClearStats -#endif - -#ifndef XUartLite_mSetControlReg -#define XUartLite_mSetControlReg XUartLite_SetControlReg -#endif - -#ifndef XUartLite_mGetStatusReg -#define XUartLite_mGetStatusReg XUartLite_GetStatusReg -#endif - -#ifndef XUartLite_mIsReceiveEmpty -#define XUartLite_mIsReceiveEmpty XUartLite_IsReceiveEmpty -#endif - -#ifndef XUartLite_mIsTransmitFull -#define XUartLite_mIsTransmitFull XUartLite_IsTransmitFull -#endif - -#ifndef XUartLite_mIsIntrEnabled -#define XUartLite_mIsIntrEnabled XUartLite_IsIntrEnabled -#endif - -#ifndef XUartLite_mEnableIntr -#define XUartLite_mEnableIntr XUartLite_EnableIntr -#endif - -#ifndef XUartLite_mDisableIntr -#define XUartLite_mDisableIntr XUartLite_DisableIntr -#endif - -/*********************************************************************/ -/** - * Macros for Driver XUartNs550 - * - *********************************************************************/ -#ifndef XUartNs550_mUpdateStats -#define XUartNs550_mUpdateStats XUartNs550_UpdateStats -#endif - -#ifndef XUartNs550_mReadReg -#define XUartNs550_mReadReg XUartNs550_ReadReg -#endif - -#ifndef XUartNs550_mWriteReg -#define XUartNs550_mWriteReg XUartNs550_WriteReg -#endif - -#ifndef XUartNs550_mClearStats -#define XUartNs550_mClearStats XUartNs550_ClearStats -#endif - -#ifndef XUartNs550_mGetLineStatusReg -#define XUartNs550_mGetLineStatusReg XUartNs550_GetLineStatusReg -#endif - -#ifndef XUartNs550_mGetLineControlReg -#define XUartNs550_mGetLineControlReg XUartNs550_GetLineControlReg -#endif - -#ifndef XUartNs550_mSetLineControlReg -#define XUartNs550_mSetLineControlReg XUartNs550_SetLineControlReg -#endif - -#ifndef XUartNs550_mEnableIntr -#define XUartNs550_mEnableIntr XUartNs550_EnableIntr -#endif - -#ifndef XUartNs550_mDisableIntr -#define XUartNs550_mDisableIntr XUartNs550_DisableIntr -#endif - -#ifndef XUartNs550_mIsReceiveData -#define XUartNs550_mIsReceiveData XUartNs550_IsReceiveData -#endif - -#ifndef XUartNs550_mIsTransmitEmpty -#define XUartNs550_mIsTransmitEmpty XUartNs550_IsTransmitEmpty -#endif - -/*********************************************************************/ -/** - * Macros for Driver XUsb - * - *********************************************************************/ -#ifndef XUsb_mReadReg -#define XUsb_mReadReg XUsb_ReadReg -#endif - -#ifndef XUsb_mWriteReg -#define XUsb_mWriteReg XUsb_WriteReg -#endif - -#endif diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xil_misc_psreset_api.h b/software/LED_Controller_bsp/microblaze_mcs/include/xil_misc_psreset_api.h deleted file mode 100755 index d749068..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xil_misc_psreset_api.h +++ /dev/null @@ -1,286 +0,0 @@ -/****************************************************************************** -* -* (c) Copyright 2013 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* @file xil_misc_psreset_api.h -* -* This file contains the various register defintions and function prototypes for -* implementing the reset functionality of zynq ps devices -* -* MODIFICATION HISTORY: -* -* Ver Who Date Changes -* ----- ---- -------- ------------------------------------------------------- -* 1.00b kpc 03/07/13 First release. -* -* -******************************************************************************/ - -#ifndef XIL_MISC_RESET_H /* prevent circular inclusions */ -#define XIL_MISC_RESET_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - - -/***************************** Include Files *********************************/ -#include "xil_types.h" -#include "xil_io.h" - -/************************** Constant Definitions *****************************/ -#define XDDRC_CTRL_BASEADDR 0xF8006000 -#define XSLCR_BASEADDR 0xF8000000 -/**< OCM configuration register */ -#define XSLCR_OCM_CFG_ADDR (XSLCR_BASEADDR + 0x910) -/**< SLCR unlock register */ -#define XSLCR_UNLOCK_ADDR (XSLCR_BASEADDR + 0x8) -/**< SLCR GEM0 rx clock control register */ -#define XSLCR_GEM0_RCLK_CTRL_ADDR (XSLCR_BASEADDR + 0x138) -/**< SLCR GEM1 rx clock control register */ -#define XSLCR_GEM1_RCLK_CTRL_ADDR (XSLCR_BASEADDR + 0x13C) -/**< SLCR GEM0 clock control register */ -#define XSLCR_GEM0_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x140) -/**< SLCR GEM1 clock control register */ -#define XSLCR_GEM1_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x144) -/**< SLCR SMC clock control register */ -#define XSLCR_SMC_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x148) -/**< SLCR GEM reset control register */ -#define XSLCR_GEM_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x214) -/**< SLCR USB0 clock control register */ -#define XSLCR_USB0_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x130) -/**< SLCR USB1 clock control register */ -#define XSLCR_USB1_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x134) -/**< SLCR USB1 reset control register */ -#define XSLCR_USB_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x210) -/**< SLCR SMC reset control register */ -#define XSLCR_SMC_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x234) -/**< SLCR Level shifter enable register */ -#define XSLCR_LVL_SHFTR_EN_ADDR (XSLCR_BASEADDR + 0x900) -/**< SLCR ARM pll control register */ -#define XSLCR_ARM_PLL_CTRL_ADDR (XSLCR_BASEADDR + 0x100) -/**< SLCR DDR pll control register */ -#define XSLCR_DDR_PLL_CTRL_ADDR (XSLCR_BASEADDR + 0x104) -/**< SLCR IO pll control register */ -#define XSLCR_IO_PLL_CTRL_ADDR (XSLCR_BASEADDR + 0x108) -/**< SLCR ARM pll configuration register */ -#define XSLCR_ARM_PLL_CFG_ADDR (XSLCR_BASEADDR + 0x110) -/**< SLCR DDR pll configuration register */ -#define XSLCR_DDR_PLL_CFG_ADDR (XSLCR_BASEADDR + 0x114) -/**< SLCR IO pll configuration register */ -#define XSLCR_IO_PLL_CFG_ADDR (XSLCR_BASEADDR + 0x118) -/**< SLCR ARM clock control register */ -#define XSLCR_ARM_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x120) -/**< SLCR DDR clock control register */ -#define XSLCR_DDR_CLK_CTRL_ADDR (XSLCR_BASEADDR + 0x124) -/**< SLCR MIO pin address register */ -#define XSLCR_MIO_PIN_00_ADDR (XSLCR_BASEADDR + 0x700) -/**< SLCR DMAC reset control address register */ -#define XSLCR_DMAC_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x20C) -/**< SLCR USB reset control address register */ -#define XSLCR_USB_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x210) -/**< SLCR GEM reset control address register */ -#define XSLCR_GEM_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x214) -/**< SLCR SDIO reset control address register */ -#define XSLCR_SDIO_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x218) -/**< SLCR SPI reset control address register */ -#define XSLCR_SPI_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x21C) -/**< SLCR CAN reset control address register */ -#define XSLCR_CAN_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x220) -/**< SLCR I2C reset control address register */ -#define XSLCR_I2C_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x224) -/**< SLCR UART reset control address register */ -#define XSLCR_UART_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x228) -/**< SLCR GPIO reset control address register */ -#define XSLCR_GPIO_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x22C) -/**< SLCR LQSPI reset control address register */ -#define XSLCR_LQSPI_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x230) -/**< SLCR SMC reset control address register */ -#define XSLCR_SMC_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x234) -/**< SLCR OCM reset control address register */ -#define XSLCR_OCM_RST_CTRL_ADDR (XSLCR_BASEADDR + 0x238) - -/**< SMC mem controller clear config register */ -#define XSMC_MEMC_CLR_CONFIG_OFFSET 0x0C -/**< SMC idlecount configuration register */ -#define XSMC_REFRESH_PERIOD_0_OFFSET 0x20 -#define XSMC_REFRESH_PERIOD_1_OFFSET 0x24 -/**< SMC ECC configuration register */ -#define XSMC_ECC_MEMCFG1_OFFSET 0x404 -/**< SMC ECC command 1 register */ -#define XSMC_ECC_MEMCMD1_OFFSET 0x404 -/**< SMC ECC command 2 register */ -#define XSMC_ECC_MEMCMD2_OFFSET 0x404 - -/**< SLCR unlock code */ -#define XSLCR_UNLOCK_CODE 0x0000DF0D - -/**< SMC mem clear configuration mask */ -#define XSMC_MEMC_CLR_CONFIG_MASK 0x5F -/**< SMC ECC memconfig 1 reset value */ -#define XSMC_ECC_MEMCFG1_RESET_VAL 0x43 -/**< SMC ECC memcommand 1 reset value */ -#define XSMC_ECC_MEMCMD1_RESET_VAL 0x01300080 -/**< SMC ECC memcommand 2 reset value */ -#define XSMC_ECC_MEMCMD2_RESET_VAL 0x01E00585 - -/**< DDR controller reset bit mask */ -#define XDDRPS_CTRL_RESET_MASK 0x1 -/**< SLCR OCM configuration reset value*/ -#define XSLCR_OCM_CFG_RESETVAL 0x8 -/**< SLCR OCM bank selection mask*/ -#define XSLCR_OCM_CFG_HIADDR_MASK 0xF -/**< SLCR level shifter enable mask*/ -#define XSLCR_LVL_SHFTR_EN_MASK 0xF - -/**< 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 - -/**< SLCR MIO register default values */ -#define XSLCR_MIO_PIN_00_RESET_VAL 0x00001601 -#define XSLCR_MIO_PIN_02_RESET_VAL 0x00000601 - -/**< 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 -/**************************** Type Definitions *******************************/ - -/* the following data type is used to hold a null terminated version string - * consisting of the following format, "X.YYX" - */ - - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ -/* - * Performs reset operation to the ddr interface - */ -void XDdr_ResetHw(); -/* - * Map the ocm region to post bootrom state - */ -void XOcm_Remap(); -/* - * Performs the smc interface reset - */ -void XSmc_ResetHw(u32 BaseAddress); -/* - * updates the MIO registers with reset values - */ -void XSlcr_MioWriteResetValues(); -/* - * updates the PLL and clock registers with reset values - */ -void XSlcr_PllWriteResetValues(); -/* - * Disables the level shifters - */ -void XSlcr_DisableLevelShifters(); -/* - * provides softreset to the GPIO interface - */ -void XSlcr_GpioPsReset(void); -/* - * provides softreset to the DMA interface - */ -void XSlcr_DmaPsReset(void); -/* - * provides softreset to the SMC interface - */ -void XSlcr_SmcPsReset(void); -/* - * provides softreset to the CAN interface - */ -void XSlcr_CanPsReset(void); -/* - * provides softreset to the Uart interface - */ -void XSlcr_UartPsReset(void); -/* - * provides softreset to the I2C interface - */ -void XSlcr_I2cPsReset(void); -/* - * provides softreset to the SPI interface - */ -void XSlcr_SpiPsReset(void); -/* - * provides softreset to the QSPI interface - */ -void XSlcr_QspiPsReset(void); -/* - * provides softreset to the USB interface - */ -void XSlcr_UsbPsReset(void); -/* - * provides softreset to the GEM interface - */ -void XSlcr_EmacPsReset(void); -/* - * provides softreset to the OCM interface - */ -void XSlcr_OcmReset(void); - - -#ifdef __cplusplus -} -#endif - -#endif /* XIL_MISC_RESET_H */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xil_printf.h b/software/LED_Controller_bsp/microblaze_mcs/include/xil_printf.h deleted file mode 100755 index dbf63e7..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xil_printf.h +++ /dev/null @@ -1,55 +0,0 @@ -/****************************************************************************** -* -* (c) Copyright 2012 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -#ifndef XIL_PRINTF_H -#define XIL_PRINTF_H - -#ifdef __cplusplus -extern "C" { -#endif - -void xil_printf(const char *ctrl1, ...); -void print(char *ptr); - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xil_testcache.h b/software/LED_Controller_bsp/microblaze_mcs/include/xil_testcache.h deleted file mode 100755 index db6d296..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xil_testcache.h +++ /dev/null @@ -1,71 +0,0 @@ -/****************************************************************************** -* -* -* (c) Copyright 2009 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xil_testcache.h -* -* This file contains utility functions to test cache. -* -* Ver Who Date Changes -* ----- ---- -------- ----------------------------------------------- -* 1.00a hbm 07/29/09 First release -* -******************************************************************************/ - -#ifndef XIL_TESTCACHE_H /* prevent circular inclusions */ -#define XIL_TESTCACHE_H /* by using protection macros */ - -#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); - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xil_testio.h b/software/LED_Controller_bsp/microblaze_mcs/include/xil_testio.h deleted file mode 100755 index 33a8286..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xil_testio.h +++ /dev/null @@ -1,101 +0,0 @@ -/****************************************************************************** -* -* (c) Copyright 2009 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xil_testmemend.h -* -* This file contains utility functions to teach endian related memory -* IO functions. -* -* Memory test description -* -* A subset of the memory tests can be selected or all of the tests can be run -* in order. If there is an error detected by a subtest, the test stops and the -* failure code is returned. Further tests are not run even if all of the tests -* are selected. -* -* -*
-* MODIFICATION HISTORY:
-*
-* Ver    Who    Date    Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00 hbm  08/05/09 First release
-* 
-* -******************************************************************************/ - -#ifndef XIL_TESTIO_H /* prevent circular inclusions */ -#define XIL_TESTIO_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ -#include "xil_types.h" - -/************************** Constant Definitions *****************************/ - - -#define XIL_TESTIO_DEFAULT 0 -#define XIL_TESTIO_LE 1 -#define XIL_TESTIO_BE 2 - -/**************************** Type Definitions *******************************/ - - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** 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); - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xil_testmem.h b/software/LED_Controller_bsp/microblaze_mcs/include/xil_testmem.h deleted file mode 100755 index 74e131d..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xil_testmem.h +++ /dev/null @@ -1,173 +0,0 @@ -/****************************************************************************** -* -* -* (c) Copyright 2009 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xil_testmem.h -* -* This file contains utility functions to test memory. -* -* Memory test description -* -* A subset of the memory tests can be selected or all of the tests can be run -* in order. If there is an error detected by a subtest, the test stops and the -* failure code is returned. Further tests are not run even if all of the tests -* are selected. -* -* Subtest descriptions: -*
-* XIL_TESTMEM_ALLMEMTESTS:
-*       Runs all of the following tests
-*
-* XIL_TESTMEM_INCREMENT:
-*       Incrementing Value Test.
-*       This test starts at 'XIL_TESTMEM_INIT_VALUE' and uses the
-*	incrementing value as the test value for memory.
-*
-* XIL_TESTMEM_WALKONES:
-*       Walking Ones Test.
-*       This test uses a walking '1' as the test value for memory.
-*       location 1 = 0x00000001
-*       location 2 = 0x00000002
-*       ...
-*
-* XIL_TESTMEM_WALKZEROS:
-*       Walking Zero's Test.
-*       This test uses the inverse value of the walking ones test
-*       as the test value for memory.
-*       location 1 = 0xFFFFFFFE
-*       location 2 = 0xFFFFFFFD
-*       ...
-*
-* XIL_TESTMEM_INVERSEADDR:
-*       Inverse Address Test.
-*       This test uses the inverse of the address of the location under test
-*       as the test value for memory.
-*
-* XIL_TESTMEM_FIXEDPATTERN:
-*       Fixed Pattern Test.
-*       This test uses the provided patters as the test value for memory.
-*       If zero is provided as the pattern the test uses '0xDEADBEEF".
-* 
-* -* WARNING -* -* The tests are DESTRUCTIVE. Run before any initialized memory spaces -* have been set up. -* -* The address provided to the memory tests is not checked for -* validity except for the NULL case. It is possible to provide a code-space -* pointer for this test to start with and ultimately destroy executable code -* causing random failures. -* -* @note -* -* Used for spaces where the address range of the region is smaller than -* the data width. If the memory range is greater than 2 ** width, -* the patterns used in XIL_TESTMEM_WALKONES and XIL_TESTMEM_WALKZEROS will -* repeat on a boundry of a power of two making it more difficult to detect -* addressing errors. The XIL_TESTMEM_INCREMENT and XIL_TESTMEM_INVERSEADDR -* tests suffer the same problem. Ideally, if large blocks of memory are to be -* tested, break them up into smaller regions of memory to allow the test -* patterns used not to repeat over the region tested. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver    Who    Date    Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00a hbm  08/25/09 First release
-* 
-* -******************************************************************************/ - -#ifndef XIL_TESTMEM_H /* prevent circular inclusions */ -#define XIL_TESTMEM_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ -#include "xil_types.h" - -/************************** Constant Definitions *****************************/ - - -/**************************** Type Definitions *******************************/ - -/* xutil_memtest defines */ - -#define XIL_TESTMEM_INIT_VALUE 1 - -/** @name Memory subtests - * @{ - */ -/** - * 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_MAXTEST XIL_TESTMEM_FIXEDPATTERN -/* @} */ - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - -/* 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); - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xil_types.h b/software/LED_Controller_bsp/microblaze_mcs/include/xil_types.h deleted file mode 100755 index f86329e..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xil_types.h +++ /dev/null @@ -1,160 +0,0 @@ -/****************************************************************************** -* -* (c) Copyright 2009-2011 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xil_types.h -* -* This file contains basic types for Xilinx software IP. - -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who    Date   Changes
-* ----- ---- -------- -------------------------------------------------------
-* 1.00a hbm  07/14/09 First release
-* 3.03a sdm  05/30/11 Added Xuint64 typedef and XUINT64_MSW/XUINT64_LSW macros
-* 
-* -******************************************************************************/ - -#ifndef XIL_TYPES_H /* prevent circular inclusions */ -#define XIL_TYPES_H /* by using protection macros */ - - -/************************** Constant Definitions *****************************/ - -#ifndef TRUE -# define TRUE 1 -#endif - -#ifndef FALSE -# define FALSE 0 -#endif - -#ifndef NULL -#define NULL 0 -#endif - -#define XIL_COMPONENT_IS_READY 0x11111111 /**< component has been initialized */ -#define XIL_COMPONENT_IS_STARTED 0x22222222 /**< component has been started */ - -/** @name New types - * New simple types. - * @{ - */ -#ifndef __KERNEL__ -#ifndef XBASIC_TYPES_H -/** - * guarded against xbasic_types.h. - */ -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned long u32; - -#define __XUINT64__ -typedef struct -{ - u32 Upper; - u32 Lower; -} Xuint64; - -/*****************************************************************************/ -/** -* Return the most significant half of the 64 bit data type. -* -* @param x is the 64 bit word. -* -* @return The upper 32 bits of the 64 bit word. -* -* @note None. -* -******************************************************************************/ -#define XUINT64_MSW(x) ((x).Upper) - -/*****************************************************************************/ -/** -* Return the least significant half of the 64 bit data type. -* -* @param x is the 64 bit word. -* -* @return The lower 32 bits of the 64 bit word. -* -* @note None. -* -******************************************************************************/ -#define XUINT64_LSW(x) ((x).Lower) - -#endif /* XBASIC_TYPES_H */ - -/** - * xbasic_types.h does not typedef s* or u64 - */ -typedef unsigned long long u64; - -typedef char s8; -typedef short s16; -typedef long s32; -typedef long long s64; -#else -#include -#endif - - -/*@}*/ - - -/************************** Constant Definitions *****************************/ - -#ifndef TRUE -#define TRUE 1 -#endif - -#ifndef FALSE -#define FALSE 0 -#endif - -#ifndef NULL -#define NULL 0 -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xio.h b/software/LED_Controller_bsp/microblaze_mcs/include/xio.h deleted file mode 100755 index 1c4cbb4..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xio.h +++ /dev/null @@ -1,266 +0,0 @@ -/* $Id: xio.h,v 1.1.2.2 2010/06/16 11:15:32 sadanan Exp $ */ -/****************************************************************************** -* -* (c) Copyright 2007-2009 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xio.h -* -* This file contains the interface for the XIo component, which encapsulates -* the Input/Output functions for processors that do not require any special -* I/O handling. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -------------------------------------------------------
-* 1.00a rpm  11/07/03 Added InSwap/OutSwap routines for endian conversion
-* 1.00a xd   11/04/04 Improved support for doxygen
-* 1.01a ecm  02/24/06 CR225908 corrected the extra curly braces in macros
-*                     and bumped version to 1.01.a.
-* 1.11a mta  03/21/07 Updated to new coding style.
-* 1.11b va   04/17/08 Updated Tcl for better CORE_CLOCK_FREQ_HZ definition
-* 1.11a sdm  03/12/09 Updated Tcl to define correct value for CORE_CLOCK_FREQ_HZ
-*                     (CR  #502010)
-* 1.13a sdm  03/12/09 Updated the Tcl to pull appropriate libraries for Little
-*                     Endian Microblaze
-*
-* 
-* -* @note -* -* This file may contain architecture-dependent items (memory-mapped or -* non-memory-mapped I/O). -* -******************************************************************************/ - -#ifndef XIO_H /* prevent circular inclusions */ -#define XIO_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ - -#include "xbasic_types.h" - -/************************** Constant Definitions *****************************/ - - -/**************************** Type Definitions *******************************/ - -/** - * Typedef for an I/O address. Typically correlates to the width of the - * address bus. - */ -typedef u32 XIo_Address; - -/***************** Macros (Inline Functions) Definitions *********************/ - -/* - * 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. - */ - -/*****************************************************************************/ -/** -* -* Performs an input operation for an 8-bit memory location by reading from the -* specified address and returning the value read from that address. -* -* @param InputPtr contains the address to perform the input operation at. -* -* @return The value read from the specified input address. -* -* @note None. -* -******************************************************************************/ -#define XIo_In8(InputPtr) (*(volatile u8 *)(InputPtr)) - -/*****************************************************************************/ -/** -* -* Performs an input operation for a 16-bit memory location by reading from the -* specified address and returning the value read from that address. -* -* @param InputPtr contains the address to perform the input operation at. -* -* @return The value read from the specified input address. -* -* @note None. -* -******************************************************************************/ -#define XIo_In16(InputPtr) (*(volatile u16 *)(InputPtr)) - -/*****************************************************************************/ -/** -* -* 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 InputPtr contains the address to perform the input operation at. -* -* @return The value read from the specified input address. -* -* @note None. -* -******************************************************************************/ -#define XIo_In32(InputPtr) (*(volatile u32 *)(InputPtr)) - - -/*****************************************************************************/ -/** -* -* Performs an output operation for an 8-bit memory location by writing the -* specified value to the the specified address. -* -* @param OutputPtr contains the address to perform the output operation -* at. -* @param Value contains the value to be output at the specified address. -* -* @return None -* -* @note None. -* -******************************************************************************/ -#define XIo_Out8(OutputPtr, Value) \ - (*(volatile u8 *)((OutputPtr)) = (Value)) - -/*****************************************************************************/ -/** -* -* Performs an output operation for a 16-bit memory location by writing the -* specified value to the the specified address. -* -* @param OutputPtr contains the address to perform the output operation -* at. -* @param Value contains the value to be output at the specified address. -* -* @return None -* -* @note None. -* -******************************************************************************/ -#define XIo_Out16(OutputPtr, Value) \ - (*(volatile u16 *)((OutputPtr)) = (Value)) - -/*****************************************************************************/ -/** -* -* Performs an output operation for a 32-bit memory location by writing the -* specified value to the the specified address. -* -* @param OutputPtr contains the address to perform the output operation -* at. -* @param Value contains the value to be output at the specified address. -* -* @return None -* -* @note None. -* -******************************************************************************/ -#define XIo_Out32(OutputPtr, Value) \ - (*(volatile u32 *)((OutputPtr)) = (Value)) - - -/* The following macros allow the software to be transportable across - * processors which use big or little endian memory models. - * - * Defined first is a no-op endian conversion macro. This macro is not to - * be used directly by software. Instead, the XIo_To/FromLittleEndianXX and - * XIo_To/FromBigEndianXX macros below are to be used to allow the endian - * conversion to only be performed when necessary - */ -#define XIo_EndianNoop(Source, DestPtr) (*DestPtr = Source) - -#ifdef XLITTLE_ENDIAN - -#define XIo_ToLittleEndian16 XIo_EndianNoop -#define XIo_ToLittleEndian32 XIo_EndianNoop -#define XIo_FromLittleEndian16 XIo_EndianNoop -#define XIo_FromLittleEndian32 XIo_EndianNoop - -#define XIo_ToBigEndian16(Source, DestPtr) XIo_EndianSwap16(Source, DestPtr) -#define XIo_ToBigEndian32(Source, DestPtr) XIo_EndianSwap32(Source, DestPtr) -#define XIo_FromBigEndian16 XIo_ToBigEndian16 -#define XIo_FromBigEndian32 XIo_ToBigEndian32 - -#else - -#define XIo_ToLittleEndian16(Source, DestPtr) XIo_EndianSwap16(Source, DestPtr) -#define XIo_ToLittleEndian32(Source, DestPtr) XIo_EndianSwap32(Source, DestPtr) -#define XIo_FromLittleEndian16 XIo_ToLittleEndian16 -#define XIo_FromLittleEndian32 XIo_ToLittleEndian32 - -#define XIo_ToBigEndian16 XIo_EndianNoop -#define XIo_ToBigEndian32 XIo_EndianNoop -#define XIo_FromBigEndian16 XIo_EndianNoop -#define XIo_FromBigEndian32 XIo_EndianNoop - -#endif - -/************************** Function Prototypes ******************************/ - -/* The following functions allow the software to be transportable across - * processors which use big or little endian memory models. These functions - * should not be directly called, but the macros XIo_To/FromLittleEndianXX and - * XIo_To/FromBigEndianXX should be used to allow the endian conversion to only - * be performed when necessary. - */ -void XIo_EndianSwap16(u16 Source, u16 *DestPtr); -void XIo_EndianSwap32(u32 Source, u32 *DestPtr); - -/* The following functions handle IO addresses where data must be swapped - * They cannot be implemented as macros - */ -u16 XIo_InSwap16(XIo_Address InAddress); -u32 XIo_InSwap32(XIo_Address InAddress); -void XIo_OutSwap16(XIo_Address OutAddress, u16 Value); -void XIo_OutSwap32(XIo_Address OutAddress, u32 Value); - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xiomodule.h b/software/LED_Controller_bsp/microblaze_mcs/include/xiomodule.h deleted file mode 100644 index 28adf31..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xiomodule.h +++ /dev/null @@ -1,581 +0,0 @@ -/* $Id$ */ -/****************************************************************************** -* -* (c) Copyright 2011,2012 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xiomodule.h -* -* The Xilinx IO Module driver component. This component supports the -* IO Module. The IO Module provides: -*
    -*
  1. Universal Asynchronous Receiver Transmitter (UART)
  2. -*
  3. Fixed Interval Timer (FIT)
  4. -*
  5. Programmable Interval Timer (PIT)
  6. -*
  7. General Purpose Output (GPO)
  8. -*
  9. General Purpose Input (GPI)
  10. -*
  11. Interrupt controller (INTC)
  12. -*
  13. IO bus (IO)
  14. -*
-* -* Universal Asynchronous Receiver Transmitter (UART): -* This UART is a minimal hardware implementation with minimal features. Most -* of the features, including parity, and number of data bits are only -* configurable when the hardware device is built, rather than at run time by -* software. The UART has an internal baud rate generator that is clocked at a -* specified input clock frequency. The baud rate can either be fixed, or -* programmable. Not all programmed baud rates can be generated from some clock -* frequencies. The requested baud rate is checked using the provided clock for -* the system, and checked against the acceptable error range. An error may be -* returned from some functions indicating the baud rate was in error because -* it could not be generated. -* -* The device has support for interrupts: a transmit interrupt, a receive -* interrupt, and an error interrupt. The interrupts are individually -* configurable when the hardware device is built. -* -* The driver defaults to no interrupts at initialization such that interrupts -* must be enabled if desired. An interrupt is generated when the transmitter -* transitions from having data to being empty, when any data is contained in -* the receive register, or when an error occurs in received data. -* -* In order to use interrupts, it's necessary for the user to connect the driver -* interrupt handler, XIOModule_InterruptHandler, to the interrupt system of the -* application. This function does not save and restore the processor context -* such that the user must provide it. Send and receive handlers may be set for -* the driver such that the handlers are called when transmit and receive -* interrupts occur. The handlers are called from interrupt context and are -* designed to allow application specific processing to be performed. -* -* The functions, XIOModule_Send and XIOModule_Recv, are provided in the driver -* to allow data to be sent and received. They are designed to be used in -* polled or interrupt modes. -* -* The driver provides a status for each received byte indicating any parity -* frame or overrun error. The driver provides statistics which allow visibility -* into these errors. -* -* Fixed Interval Timer (FIT): -* The fixed interval timer supports the following features: -* - Interrupt driven mode -* -* The timer has a hardware programmed time period, which can be configured to -* cause a periodic interrupt. The driver only provides the ability to handle -* such interrupts. -* -* Programmable Interval Timer (PIT): -* The programmable interval timer supports the following features: -* - Polled mode -* - Interrupt driven mode -* - Enabling and disabling -* - Automatic reload -* -* The timer operates in compare mode. The timer always counts down. -* -* 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 loads an initial value, referred to as the load -* value, into the timer and starts counting down. The timer expires when it -* rolls under. An external Output signal may be configured such that a pulse -* is generated with this signal when it rolls under. -* -* The timer can be configured to cause an interrupt when the count reaches -* zero. An external output is also toggled when the count reaches zero. -* -* Interrupts -* -* It is the responsibility of the application to connect the interrupt -* handler of the timer to the interrupt source. The interrupt handler function, -* XIOModule_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. -* -* General Purpose Output (GPO): -* The GPO has support for up to 32 I/O discrete outputs for each channel (128 -* bits total). -* -* IO Bus (IO): -* The IO Bus provides a generic mechanism to extend the IO Module -* functionality by providing a memory mapped IO area. Reading and writing of -* byte, halfword and word data is provided. -* -* General Purpose Input (GPI): -* The GPI has support for up to 32 I/O discrete outputs for each channel (128 -* bits total). An interrupt can be generated when any bit in a GPI changes. -* -* Interrupt controller (INTC): -* 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, xiomodule_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 xiomodule_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 -* XIOModule_Connect() and XIOModule_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 XIOModule_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. -* -* With fast interrupts enabled, the XIOModule_ConnectFastHandler() function -* should be used instead of XIOModule_Connect(). Note that the function pointer -* parameter Handler, must be a declared with the fast_interrupt attribute: -* -* void Handler() __attribute__((fast_interrupt)); -* -* The routine defined by XIOModule_Connect() can be used by setting normal -* interrupt mode, using XIOModule_SetNormalIntrMode(). -* -* @note -* -* This API utilizes 32 bit I/O to the registers. With less than 32 bits, the -* unused bits from registers are read as zero and written as don't cares. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -------------------------------------------------------
-* 1.00a sa   07/15/11 First release
-* 1.01a sa   04/10/12 Updated with fast interrupt
-* 1.02a sa   07/25/12 Updated with GPI interrupts and programmable baudrate
-* 
-* -******************************************************************************/ - -#ifndef IOMODULE_H /* prevent circular inclusions */ -#define IOMODULE_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - - -/***************************** Include Files *********************************/ - -#include "xbasic_types.h" -#include "xparameters.h" -#include "xstatus.h" -#include "xiomodule_l.h" - -/************************** Constant Definitions *****************************/ - -/** - * @name Configuration options - * These options are used in XIOModule_SetOptions() to configure the - * device. - * @{ - */ - -/** - * Used to configure the Programmable Interval Timer. - *
- * XTC_INT_MODE_OPTION		Dummy compatibility option. Enable interrupt
- *                              output.
- * XTC_AUTO_RELOAD_OPTION	In compare mode, configures the timer to reload
- *                              from the load value. The default mode causes
- *                              the timer to hold after it rolls under.
- * 
- */ -#define XTC_INT_MODE_OPTION 0 -#define XTC_AUTO_RELOAD_OPTION 0x00000002UL - -/** - * Used to configure the Interrupt Controller. - *
- * 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 Hardware configuration mnemonics - * These mnemonics are used when accessing hardware configuration parameters. - * @{ - */ - -/** - * Mnemonics for the Programmable Interval Timer hardware configuration. - *
- * XTC_PRESCALER_*	Define the prescaler configured in hardware.
- * 
- */ -#define XTC_PRESCALER_NONE 0 -#define XTC_PRESCALER_FIT1 1 -#define XTC_PRESCALER_FIT2 2 -#define XTC_PRESCALER_FIT3 3 -#define XTC_PRESCALER_FIT4 4 -#define XTC_PRESCALER_PIT1 5 -#define XTC_PRESCALER_PIT2 6 -#define XTC_PRESCALER_PIT3 7 -#define XTC_PRESCALER_PIT4 8 -#define XTC_PRESCALER_EXTERNAL 9 -/*@}*/ - - -/**************************** Type Definitions *******************************/ - -/** - * Callback function. The first argument 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. - * The second argument is the ByteCount which is the number of bytes that - * actually moved from/to the buffer provided in the _Send/_Receive call. - */ -typedef void (*XIOModule_Handler)(void *CallBackRef, - unsigned int ByteCount); - -/** - * This typedef contains configuration information for the device. - */ -typedef struct { - u16 DeviceId; /**< Unique ID of device */ - u32 BaseAddress; /**< Unique identifier */ - u32 IoBaseAddress; /**< IO Bus Base Address */ - u32 FastIntr; /**< Fast Interrupt enabled */ - u32 BaseVector; /**< Relocatable base vector */ - u32 AckBeforeService; /**< Ack location per interrupt */ - u32 Options; /**< Device options */ - u32 InputClockHz; /**< Input clock frequency (Hz) */ - u32 BaudRate; /**< Current baud rate */ - u8 PitUsed[XTC_DEVICE_TIMER_COUNT]; /**< PIT is used */ - u8 PitSize[XTC_DEVICE_TIMER_COUNT]; /**< PIT timer counter size */ - u8 PitPrescaler[XTC_DEVICE_TIMER_COUNT]; /**< PIT prescaler */ - u8 PitReadable[XTC_DEVICE_TIMER_COUNT]; /**< PIT readable */ - u32 GpoInit[XGPO_DEVICE_COUNT]; /**< GPO initial value */ - XIOModule_VectorTableEntry - HandlerTable[XPAR_IOMODULE_INTC_MAX_INTR_SIZE]; - /**< Static vector table of interrupt handlers */ -} XIOModule_Config; - -/** - * Statistics for the UART - */ -typedef struct { - u32 TransmitInterrupts; /**< Number of transmit interrupts */ - u32 ReceiveInterrupts; /**< Number of receive interrupts */ - u32 CharactersTransmitted; /**< Number of characters transmitted */ - u32 CharactersReceived; /**< Number of characters received */ - u32 ReceiveOverrunErrors; /**< Number of receive overruns */ - u32 ReceiveParityErrors; /**< Number of receive parity errors */ - u32 ReceiveFramingErrors; /**< Number of receive framing errors */ -} XIOModule_Uart_Stats; - -/** - * The following data type is used to manage the buffers that are handled - * when sending and receiving UART data in the interrupt mode. It is intended - * for internal use only. - */ -typedef struct { - u8 *NextBytePtr; - unsigned int RequestedBytes; - unsigned int RemainingBytes; -} XIOModule_Buffer; - -/** - * Signature for the timer 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 TimerNumber is the number of the timer within the device. The - * device typically contains from one to four timers. The timer - * number is a zero based number with a range of 0 to - * (XTC_DEVICE_TIMER_COUNT - 1). - */ -typedef void (*XIOModule_Timer_Handler) (void *CallBackRef, u8 TimerNumber); - -/** - * Programmable Interval Timer statistics - */ -typedef struct { - u32 Interrupts; /**< Number of timer interrupts that have occurred */ -} XIOModule_Timer_Stats; - -/** - * The XIOModule driver instance data. The user is required to allocate a - * variable of this type for every iomodule 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 initialized and ready */ - u32 IsStarted; /**< Device has been started */ - XIOModule_Config *CfgPtr; /**< Pointer to inst config entry */ - - XIOModule_Uart_Stats Uart_Stats; /**< UART Statistics */ - XIOModule_Buffer SendBuffer; /**< UART Send buffer */ - XIOModule_Buffer ReceiveBuffer; /**< UART Receive buffer */ - XIOModule_Handler RecvHandler; /**< UART Receive Handler */ - void *RecvCallBackRef; /**< Callback ref for recv handler */ - XIOModule_Handler SendHandler; /**< UART Send Handler */ - void *SendCallBackRef; /**< Callback ref for send handler */ - u32 CurrentUBRR; /**< UART Baud Rate Register value */ - - u32 UnhandledInterrupts; /**< Iomodule Interrupt Statistics */ - u32 CurrentIER; /**< Interrupt Enable Register value*/ - u32 CurrentIMR; /**< Interrupt Mode Register value */ - - XIOModule_Timer_Stats Timer_Stats[XTC_DEVICE_TIMER_COUNT]; - /**< Timer statistics */ - u32 CurrentTLR[XTC_DEVICE_TIMER_COUNT]; - /**< Timer Load Register values */ - u8 CurrentTCSR[XTC_DEVICE_TIMER_COUNT]; - /**< Timer Control Register values */ - XIOModule_Timer_Handler Handler; /**< Timer Callback function */ - void *CallBackRef; /**< Timer Callback handler ref */ - - u32 GpoValue[XGPO_DEVICE_COUNT]; /**< GPO current value */ - - u32 IoBaseAddress; /**< Base address of IO Bus */ -} XIOModule; - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - -/* - * Required functions in xiomodule.c - */ -int XIOModule_Initialize(XIOModule * InstancePtr, u16 DeviceId); -int XIOModule_Timer_Initialize(XIOModule * InstancePtr, u16 DeviceId); - -int XIOModule_Start(XIOModule * InstancePtr); -void XIOModule_Stop(XIOModule * InstancePtr); - -int XIOModule_Connect(XIOModule * InstancePtr, u8 Id, - XInterruptHandler Handler, void *CallBackRef); -void XIOModule_Disconnect(XIOModule * InstancePtr, u8 Id); - -void XIOModule_Enable(XIOModule * InstancePtr, u8 Id); -void XIOModule_Disable(XIOModule * InstancePtr, u8 Id); - -void XIOModule_Acknowledge(XIOModule * InstancePtr, u8 Id); - -XIOModule_Config *XIOModule_LookupConfig(u16 DeviceId); - -int XIOModule_ConnectFastHandler(XIOModule *InstancePtr, u8 Id, - XFastInterruptHandler Handler); - -void XIOModule_SetNormalIntrMode(XIOModule *InstancePtr, u8 Id); - - -/* - * API Basic functions for GPI and GPO implemented in xiomodule.c - */ -u32 XIOModule_DiscreteRead(XIOModule *InstancePtr, unsigned Channel); -void XIOModule_DiscreteWrite(XIOModule *InstancePtr, - unsigned Channel, - u32 Mask); - -/* - * API Functions for GPI and GPO implemented in xiomodule_extra.c - */ -void XIOModule_DiscreteSet(XIOModule *InstancePtr, unsigned Channel, u32 Mask); -void XIOModule_DiscreteClear(XIOModule *InstancePtr, - unsigned Channel, - u32 Mask); - - -/* - * Required functions, in file xiomodule_uart.c - */ -int XIOModule_CfgInitialize(XIOModule *InstancePtr, - XIOModule_Config *Config, - u32 EffectiveAddr); - -void XIOModule_ResetFifos(XIOModule *InstancePtr); /* Dummy */ - -unsigned int XIOModule_Send(XIOModule *InstancePtr, u8 *DataBufferPtr, - unsigned int NumBytes); -unsigned int XIOModule_Recv(XIOModule *InstancePtr, u8 *DataBufferPtr, - unsigned int NumBytes); - -int XIOModule_IsSending(XIOModule *InstancePtr); - -int XIOModule_SetBaudRate(XIOModule *InstancePtr, u32 BaudRate); - -/* - * Functions for statistics, in file xiomodule_stats.c - */ -void XIOModule_GetStats(XIOModule *InstancePtr, - XIOModule_Uart_Stats *StatsPtr); -void XIOModule_ClearStats(XIOModule *InstancePtr); - -/* - * Interrupt functions in xiomodule_intr.c - */ -void XIOModule_VoidInterruptHandler(); -void XIOModule_InterruptHandler(XIOModule * InstancePtr); - -void XIOModule_Uart_EnableInterrupt(XIOModule *InstancePtr); -void XIOModule_Uart_DisableInterrupt(XIOModule *InstancePtr); - -void XIOModule_SetRecvHandler(XIOModule *InstancePtr, XIOModule_Handler FuncPtr, - void *CallBackRef); -void XIOModule_SetSendHandler(XIOModule *InstancePtr, XIOModule_Handler FuncPtr, - void *CallBackRef); - -void XIOModule_Uart_InterruptHandler(XIOModule *InstancePtr); - -/* - * Options functions in xiomodule_options.c - */ -int XIOModule_SetOptions(XIOModule * InstancePtr, u32 Options); -u32 XIOModule_GetOptions(XIOModule * InstancePtr); - -/* - * Self-test functions in xiomodule_selftest.c - */ -int XIOModule_SelfTest(XIOModule * InstancePtr); - - - -/* - * Required functions, in file xiomodule.c - */ -void XIOModule_Timer_Start(XIOModule * InstancePtr, u8 TimerNumber); -void XIOModule_Timer_Stop(XIOModule * InstancePtr, u8 TimerNumber); -u32 XIOModule_GetValue(XIOModule * InstancePtr, u8 TimerNumber); -void XIOModule_SetResetValue(XIOModule * InstancePtr, u8 TimerNumber, - u32 ResetValue); -u32 XIOModule_GetCaptureValue(XIOModule * InstancePtr, u8 TimerNumber); -int XIOModule_IsExpired(XIOModule * InstancePtr, u8 TimerNumber); -void XIOModule_Reset(XIOModule * InstancePtr, u8 TimerNumber); - -/* - * Functions for options, in file xiomodule_options.c - */ -void XIOModule_Timer_SetOptions(XIOModule * InstancePtr, u8 TimerNumber, - u32 Options); -u32 XIOModule_Timer_GetOptions(XIOModule * InstancePtr, u8 TimerNumber); - -/* - * Functions for statistics, in file xiomodule_stats.c - */ -void XIOModule_Timer_GetStats(XIOModule * InstancePtr, - XIOModule_Timer_Stats * StatsPtr); -void XIOModule_Timer_ClearStats(XIOModule * InstancePtr); - -/* - * Functions for self-test, in file xiomodule_selftest.c - */ -int XIOModule_Timer_SelfTest(XIOModule * InstancePtr, u8 IOModuleNumber); - -/* - * Functions for interrupts, in file xiomodule_intr.c - */ -void XIOModule_SetHandler(XIOModule * InstancePtr, - XIOModule_Timer_Handler FuncPtr, - void *CallBackRef); -void XIOModule_Timer_InterruptHandler(void *InstancePtr); - - -/* - * Basic functions for IO Bus read and write implemented in xiomodule.c - */ -u32 XIOModule_IoReadWord(XIOModule *InstancePtr, u32 ByteOffset); -u16 XIOModule_IoReadHalfword(XIOModule *InstancePtr, u32 ByteOffset); -u8 XIOModule_IoReadByte(XIOModule *InstancePtr, u32 ByteOffset); - -void XIOModule_IoWriteWord(XIOModule *InstancePtr, u32 ByteOffset, u32 Data); -void XIOModule_IoWriteHalfword(XIOModule *InstancePtr, u32 ByteOffset, u16 Data); -void XIOModule_IoWriteByte(XIOModule *InstancePtr, u32 ByteOffset, u8 Data); - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xiomodule_i.h b/software/LED_Controller_bsp/microblaze_mcs/include/xiomodule_i.h deleted file mode 100644 index 0099a94..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xiomodule_i.h +++ /dev/null @@ -1,129 +0,0 @@ -/* $Id$ */ -/****************************************************************************** -* -* (c) Copyright 2011 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xiomodule_i.h -* -* This file contains data which is shared between files and internal to the -* XIOModule component. It is intended for internal use only. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -------------------------------------------------------
-* 1.00a sa   07/15/11 First release
-* 1.02a sa   07/25/12 Added UART prototypes
-* 
-* -******************************************************************************/ - -#ifndef XIOMODULE_I_H /* prevent circular inclusions */ -#define XIOMODULE_I_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ - -#include "xbasic_types.h" -#include "xiomodule.h" - -/************************** Constant Definitions *****************************/ - - -/**************************** Type Definitions *******************************/ - - -/***************** Macros (Inline Functions) Definitions *********************/ - -/**************************************************************************** -* -* Update the statistics of the instance. -* -* @param InstancePtr is a pointer to the XIOMOdule instance. -* @param StatusRegister contains the contents of the UART status -* register to update the statistics with. -* -* @return None. -* -* @note -* -* Signature: void XIOModule_UpdateStats(XIOModule *InstancePtr, -* u32 StatusRegister) -* -*****************************************************************************/ -#define XIOModule_UpdateStats(InstancePtr, StatusRegister) \ -{ \ - if ((StatusRegister) & XUL_SR_OVERRUN_ERROR) \ - { \ - (InstancePtr)->Uart_Stats.ReceiveOverrunErrors++; \ - } \ - if ((StatusRegister) & XUL_SR_PARITY_ERROR) \ - { \ - (InstancePtr)->Uart_Stats.ReceiveParityErrors++; \ - } \ - if ((StatusRegister) & XUL_SR_FRAMING_ERROR) \ - { \ - (InstancePtr)->Uart_Stats.ReceiveFramingErrors++; \ - } \ -} - -/************************** Function Prototypes ******************************/ - -unsigned int XIOModule_SendBuffer(XIOModule *InstancePtr); -unsigned int XIOModule_ReceiveBuffer(XIOModule *InstancePtr); - - -/************************** Variable Definitions *****************************/ - -extern u32 XIOModule_BitPosMask[]; - -extern XIOModule_Config XIOModule_ConfigTable[]; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xiomodule_io.h b/software/LED_Controller_bsp/microblaze_mcs/include/xiomodule_io.h deleted file mode 100644 index 8870a79..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xiomodule_io.h +++ /dev/null @@ -1,86 +0,0 @@ -/* $Id$ */ -/****************************************************************************** -* -* (c) Copyright 2011 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xiomodule_io.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 -*
-* MODIFICATION HISTORY:
-*
-* Ver   Who  Date     Changes
-* ----- ---- -------- -----------------------------------------------------
-* 1.00a sa   07/15/11 First release
-* 
-* -******************************************************************************/ - -#ifndef XIOMODULE_IO_H /* prevent circular inclusions */ -#define XIOMODULE_IO_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ - -#include "xil_io.h" - -/***************** Macros (Inline Functions) Definitions *********************/ - -#define XIomodule_In32 Xil_In32 -#define XIomodule_Out32 Xil_Out32 - -#define XIomodule_In16 Xil_In16 -#define XIomodule_Out16 Xil_Out16 - -#define XIomodule_In8 Xil_In8 -#define XIomodule_Out8 Xil_Out8 - - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xiomodule_l.h b/software/LED_Controller_bsp/microblaze_mcs/include/xiomodule_l.h deleted file mode 100644 index b384bc3..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xiomodule_l.h +++ /dev/null @@ -1,446 +0,0 @@ -/* $Id$ */ -/****************************************************************************** -* -* (c) Copyright 2011,2012 Xilinx, Inc. All rights reserved. -* -* This file contains confidential and proprietary information of Xilinx, Inc. -* and is protected under U.S. and international copyright and other -* intellectual property laws. -* -* DISCLAIMER -* This disclaimer is not a license and does not grant any rights to the -* materials distributed herewith. Except as otherwise provided in a valid -* license issued to you by Xilinx, and to the maximum extent permitted by -* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL -* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, -* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF -* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; -* and (2) Xilinx shall not be liable (whether in contract or tort, including -* negligence, or under any other theory of liability) for any loss or damage -* of any kind or nature related to, arising under or in connection with these -* materials, including for any direct, or any indirect, special, incidental, -* or consequential loss or damage (including loss of data, profits, goodwill, -* or any type of loss or damage suffered as a result of any action brought by -* a third party) even if such damage or loss was reasonably foreseeable or -* Xilinx had been advised of the possibility of the same. -* -* CRITICAL APPLICATIONS -* Xilinx products are not designed or intended to be fail-safe, or for use in -* any application requiring fail-safe performance, such as life-support or -* safety devices or systems, Class III medical devices, nuclear facilities, -* applications related to the deployment of airbags, or any other applications -* that could lead to death, personal injury, or severe property or -* environmental damage (individually and collectively, "Critical -* Applications"). Customer assumes the sole risk and liability of any use of -* Xilinx products in Critical Applications, subject only to applicable laws -* and regulations governing limitations on product liability. -* -* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE -* AT ALL TIMES. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xiomodule_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 xiomodule.h should still use -* XIntc_Connect(), as always. -* Also see the discussion of the interrupt vector tables in xiomodule.h. -* -* There are currently two interrupt handlers specified in this interface. -* -* - XIOModule_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. -* -* - XIOModule_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.00a sa   07/15/11 First release
-* 1.01a sa   04/10/12 Updated with fast interrupt
-* 1.02a sa   07/25/12 Updated with GPI interrupt support
-* 
-* -******************************************************************************/ - -#ifndef XIOMODULE_L_H /* prevent circular inclusions */ -#define XIOMODULE_L_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ - -#include "xbasic_types.h" -#include "xparameters.h" -#include "xiomodule_io.h" - -#include "xio.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 4 - -/** - * Each timer counter consumes 16 bytes of address space. - */ -#define XTC_TIMER_COUNTER_OFFSET 16 -#define XTC_TIMER_COUNTER_SHIFT 4 - -/** - * Define the offsets from the base address for all the registers of the - * IO module, some registers may be optional in the hardware device. - */ -#define XUL_RX_OFFSET 0x00000000 /**< UART Receive Register - R */ -#define XUL_TX_OFFSET 0x00000004 /**< UART Transmit Register - W */ -#define XUL_STATUS_REG_OFFSET 0x00000008 /**< UART Status Register - R */ -#define XUL_BAUDRATE_OFFSET 0x0000004C /**< UART Baud Rate Register - W */ - -#define XIN_IMR_OFFSET 0x0000000C /**< Intr Mode Register - W */ - -#define XGO_OUT_OFFSET 0x00000010 /**< General Purpose Output - W */ - -#define XGI_IN_OFFSET 0x00000020 /**< General Purpose Input - R */ - -#define XIN_ISR_OFFSET 0x00000030 /**< Intr Status Register - R */ -#define XIN_IPR_OFFSET 0x00000034 /**< Intr Pending Register - R */ -#define XIN_IER_OFFSET 0x00000038 /**< Intr Enable Register - W */ -#define XIN_IAR_OFFSET 0x0000003C /**< Intr Acknowledge Register - W */ - -#define XTC_TLR_OFFSET 0x00000040 /**< Timer Load register - W */ -#define XTC_TCR_OFFSET 0x00000044 /**< Timer counter register - R */ -#define XTC_TCSR_OFFSET 0x00000048 /**< Timer Control register - W */ -#define XIN_IVAR_OFFSET 0x00000080 /**< Intr Vector Address Register, - Interrupt 0 offset, present - only for Fast Interrupt - W */ - -/** - * UART status register bit position masks - */ -#define XUL_SR_PARITY_ERROR 0x80 -#define XUL_SR_FRAMING_ERROR 0x40 -#define XUL_SR_OVERRUN_ERROR 0x20 -#define XUL_SR_INTR_ENABLED 0x10 /**< UART Interrupt enabled */ -#define XUL_SR_TX_FIFO_FULL 0x08 /**< UART Transmit FIFO full */ -#define XUL_SR_RX_FIFO_VALID_DATA 0x01 /**< UART Data Register valid */ - -/** - * UART stop bits are fixed at 1. Baud, parity, and data bits are fixed on a - * per instance basis. - */ -#define XUL_STOP_BITS 1 - -/** - * UART Parity definitions. - */ -#define XUL_PARITY_NONE 0 -#define XUL_PARITY_ODD 1 -#define XUL_PARITY_EVEN 2 - -/** - * Defines the number of GPI and GPO within a single hardware device. This - * number is not currently parameterized in the hardware but may be in the - * future. - * @{ - */ -#define XGPI_DEVICE_COUNT 4 -#define XGPO_DEVICE_COUNT 4 - -/** - * The following constants describe the offset of each GPI and GPO channel's - * data from the base address. - */ -#define XGPI_CHAN_OFFSET 0x00004 -#define XGPI_DATA_OFFSET 0x00020 - -#define XGPO_CHAN_OFFSET 0x00004 -#define XGPO_DATA_OFFSET 0x00010 - -/** - * Interrupt register bit position masks. - */ -#define XIN_IOMODULE_GPI_4_INTERRUPT_INTR 14 -#define XIN_IOMODULE_GPI_3_INTERRUPT_INTR 13 -#define XIN_IOMODULE_GPI_2_INTERRUPT_INTR 12 -#define XIN_IOMODULE_GPI_1_INTERRUPT_INTR 11 -#define XIN_IOMODULE_FIT_4_INTERRUPT_INTR 10 -#define XIN_IOMODULE_FIT_3_INTERRUPT_INTR 9 -#define XIN_IOMODULE_FIT_2_INTERRUPT_INTR 8 -#define XIN_IOMODULE_FIT_1_INTERRUPT_INTR 7 -#define XIN_IOMODULE_PIT_4_INTERRUPT_INTR 6 -#define XIN_IOMODULE_PIT_3_INTERRUPT_INTR 5 -#define XIN_IOMODULE_PIT_2_INTERRUPT_INTR 4 -#define XIN_IOMODULE_PIT_1_INTERRUPT_INTR 3 -#define XIN_IOMODULE_UART_RX_INTERRUPT_INTR 2 -#define XIN_IOMODULE_UART_TX_INTERRUPT_INTR 1 -#define XIN_IOMODULE_UART_ERROR_INTERRUPT_INTR 0 - -#define XIN_IOMODULE_EXTERNAL_INTERRUPT_INTR 16 -/* @} */ - -/** - * @name Control Status Register Bit Definitions - * Control Status Register bit masks - * Used to configure the timer counter device. - * @{ - */ -#define XTC_CSR_ENABLE_TMR_MASK 0x00000001 /**< Enables the timer */ -#define XTC_CSR_AUTO_RELOAD_MASK 0x00000002 /**< In compare mode, - configures the timer - reload from the Load - Register. The default - mode causes the timer - counter to hold when it - rolls under. */ -/* @} */ - - -/**************************** 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; -} XIOModule_VectorTableEntry; - -typedef void (*XFastInterruptHandler) (void); - -/***************** Macros (Inline Functions) Definitions *********************/ - -/****************************************************************************/ -/** -* -* 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 XIOModule_EnableIntr(u32 BaseAddress, u32 EnableMask); -* -*****************************************************************************/ -#define XIOModule_EnableIntr(BaseAddress, EnableMask) \ - XIomodule_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 enable register. -* Each bit of the mask corresponds to an interrupt input signal -* that is connected to the interrupt controller (INT0 = LSB). -* Only bits which are set in the mask will disable interrupts. -* -* @return None. -* -* @note C-style signature: -* void XIOModule_DisableIntr(u32 BaseAddress, u32 DisableMask); -* -*****************************************************************************/ -#define XIOModule_DisableIntr(BaseAddress, DisableMask) \ - XIomodule_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 XIOModule_AckIntr(u32 BaseAddress, u32 AckMask); -* -*****************************************************************************/ -#define XIOModule_AckIntr(BaseAddress, AckMask) \ - XIomodule_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 XIOModule_GetIntrStatus(u32 BaseAddress); -* -*****************************************************************************/ -#define XIOModule_GetIntrStatus(BaseAddress) \ - (XIomodule_In32((BaseAddress) + XIN_IPR_OFFSET)) - - -/****************************************************************************/ -/** -* -* Get the contents of the UART status register. Use the XUL_SR_* constants -* defined above to interpret the bit-mask returned. -* -* @param BaseAddress is the base address of the device -* -* @return A 32-bit value representing the contents of the status -* register. -* -* @note C-style Signature: -* u32 XIOModule_GetStatusReg(u32 BaseAddress); -* -*****************************************************************************/ -#define XIOModule_GetStatusReg(BaseAddress) \ - XIomodule_In32((BaseAddress) + XUL_STATUS_REG_OFFSET) - -/****************************************************************************/ -/** -* -* Check to see if the UART receiver has data. -* -* @param BaseAddress is the base address of the device -* -* @return TRUE if the receiver is empty, FALSE if there is data present. -* -* @note C-style Signature: -* int XIOModule_IsReceiveEmpty(u32 BaseAddress); -* -*****************************************************************************/ -#define XIOModule_IsReceiveEmpty(BaseAddress) \ - ((XIOModule_GetStatusReg((BaseAddress)) & XUL_SR_RX_FIFO_VALID_DATA) != \ - XUL_SR_RX_FIFO_VALID_DATA) - - -/****************************************************************************/ -/** -* -* Check to see if the transmitter is full. -* -* @param BaseAddress is the base address of the device -* -* @return TRUE if the transmitter is full, FALSE otherwise. -* -* @note C-style Signature: -* int XIOModule_IsTransmitFull(u32 BaseAddress); -* -*****************************************************************************/ -#define XIOModule_IsTransmitFull(BaseAddress) \ - ((XIOModule_GetStatusReg((BaseAddress)) & XUL_SR_TX_FIFO_FULL) == \ - XUL_SR_TX_FIFO_FULL) - - -/****************************************************************************/ -/** -* -* Write a value to a GPO register. A 32 bit write is performed. If the -* GPO component is implemented in a smaller width, only the least -* significant data is written. -* -* @param BaseAddress is the base address of the GPO device. -* @param RegOffset is the register offset from the base to write to. -* @param Data is the data written to the register. -* -* @return None. -* -* @note C-style signature: -* void XIOModule_WriteReg(u32 BaseAddress, -* unsigned RegOffset, u32 Data) -* -****************************************************************************/ -#define XIOModule_WriteReg(BaseAddress, RegOffset, Data) \ - XIomodule_Out32((BaseAddress) + (RegOffset), (u32)(Data)) - -/****************************************************************************/ -/** -* -* Read a value from a GPI register. A 32 bit read is performed. If the -* GPI component is implemented in a smaller width, only the least -* significant data is read from the register. The most significant data -* will be read as 0. -* -* @param BaseAddress is the base address of the GPI device. -* @param RegOffset is the register offset from the base to read from. -* -* @return Data read from the register. -* -* @note C-style signature: -* u32 XIOModule_ReadReg(u32 BaseAddress, unsigned RegOffset) -* -******************************************************************************/ -#define XIOModule_ReadReg(BaseAddress, RegOffset) \ - XIomodule_In32((BaseAddress) + (RegOffset)) - - -/************************** Function Prototypes ******************************/ - -/* - * UART standard in and standard out handlers, to be connected to generic - * I/O handling code. - */ -void XIOModule_SendByte(u32 BaseAddress, u8 Data); -u8 XIOModule_RecvByte(u32 BaseAddress); - - -/* - * Interrupt controller handlers, to be connected to processor exception - * handling code. - */ -void XIOModule_LowLevelInterruptHandler(void); -void XIOModule_DeviceInterruptHandler(void *DeviceId); - -/* Various configuration functions */ -void XIOModule_SetIntrSvcOption(u32 BaseAddress, int Option); - -void XIOModule_RegisterHandler(u32 BaseAddress, - int InterruptId, - XInterruptHandler Handler, - void *CallBackRef); - -/************************** Variable Definitions *****************************/ - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xparameters.h b/software/LED_Controller_bsp/microblaze_mcs/include/xparameters.h deleted file mode 100644 index 2b9cf62..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xparameters.h +++ /dev/null @@ -1,653 +0,0 @@ - -/******************************************************************* -* -* CAUTION: This file is automatically generated by libgen. -* Version: Xilinx EDK 14.7 EDK_P.20131013 -* DO NOT EDIT. -* -* Copyright (c) 1995-2012 Xilinx, Inc. All rights reserved. - -* -* Description: Driver parameters -* -*******************************************************************/ - -#define STDIN_BASEADDRESS 0x80000000 -#define STDOUT_BASEADDRESS 0x80000000 - -/******************************************************************/ - -/* Definitions for driver BRAM */ -#define XPAR_XBRAM_NUM_INSTANCES 2 - -/* Definitions for peripheral DLMB_CNTLR */ -#define XPAR_DLMB_CNTLR_DEVICE_ID 0 -#define XPAR_DLMB_CNTLR_DATA_WIDTH 32 -#define XPAR_DLMB_CNTLR_ECC 0 -#define XPAR_DLMB_CNTLR_FAULT_INJECT 0 -#define XPAR_DLMB_CNTLR_CE_FAILING_REGISTERS 0 -#define XPAR_DLMB_CNTLR_UE_FAILING_REGISTERS 0 -#define XPAR_DLMB_CNTLR_ECC_STATUS_REGISTERS 0 -#define XPAR_DLMB_CNTLR_CE_COUNTER_WIDTH 0 -#define XPAR_DLMB_CNTLR_ECC_ONOFF_REGISTER 0 -#define XPAR_DLMB_CNTLR_ECC_ONOFF_RESET_VALUE 1 -#define XPAR_DLMB_CNTLR_WRITE_ACCESS 2 -#define XPAR_DLMB_CNTLR_BASEADDR 0x00000000 -#define XPAR_DLMB_CNTLR_HIGHADDR 0x00003FFF -#define XPAR_DLMB_CNTLR_S_AXI_CTRL_BASEADDR 0xFFFFFFFF -#define XPAR_DLMB_CNTLR_S_AXI_CTRL_HIGHADDR 0xFFFFFFFF - - -/* Definitions for peripheral ILMB_CNTLR */ -#define XPAR_ILMB_CNTLR_DEVICE_ID 1 -#define XPAR_ILMB_CNTLR_DATA_WIDTH 32 -#define XPAR_ILMB_CNTLR_ECC 0 -#define XPAR_ILMB_CNTLR_FAULT_INJECT 0 -#define XPAR_ILMB_CNTLR_CE_FAILING_REGISTERS 0 -#define XPAR_ILMB_CNTLR_UE_FAILING_REGISTERS 0 -#define XPAR_ILMB_CNTLR_ECC_STATUS_REGISTERS 0 -#define XPAR_ILMB_CNTLR_CE_COUNTER_WIDTH 0 -#define XPAR_ILMB_CNTLR_ECC_ONOFF_REGISTER 0 -#define XPAR_ILMB_CNTLR_ECC_ONOFF_RESET_VALUE 1 -#define XPAR_ILMB_CNTLR_WRITE_ACCESS 2 -#define XPAR_ILMB_CNTLR_BASEADDR 0x00000000 -#define XPAR_ILMB_CNTLR_HIGHADDR 0x00003FFF -#define XPAR_ILMB_CNTLR_S_AXI_CTRL_BASEADDR 0xFFFFFFFF -#define XPAR_ILMB_CNTLR_S_AXI_CTRL_HIGHADDR 0xFFFFFFFF - - -/******************************************************************/ - -/* Canonical definitions for peripheral DLMB_CNTLR */ -#define XPAR_BRAM_0_DEVICE_ID XPAR_DLMB_CNTLR_DEVICE_ID -#define XPAR_BRAM_0_DATA_WIDTH 32 -#define XPAR_BRAM_0_ECC 0 -#define XPAR_BRAM_0_FAULT_INJECT 0 -#define XPAR_BRAM_0_CE_FAILING_REGISTERS 0 -#define XPAR_BRAM_0_UE_FAILING_REGISTERS 0 -#define XPAR_BRAM_0_ECC_STATUS_REGISTERS 0 -#define XPAR_BRAM_0_CE_COUNTER_WIDTH 0 -#define XPAR_BRAM_0_ECC_ONOFF_REGISTER 0 -#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 0x00003FFF - -/* Canonical definitions for peripheral ILMB_CNTLR */ -#define XPAR_BRAM_1_DEVICE_ID XPAR_ILMB_CNTLR_DEVICE_ID -#define XPAR_BRAM_1_DATA_WIDTH 32 -#define XPAR_BRAM_1_ECC 0 -#define XPAR_BRAM_1_FAULT_INJECT 0 -#define XPAR_BRAM_1_CE_FAILING_REGISTERS 0 -#define XPAR_BRAM_1_UE_FAILING_REGISTERS 0 -#define XPAR_BRAM_1_ECC_STATUS_REGISTERS 0 -#define XPAR_BRAM_1_CE_COUNTER_WIDTH 0 -#define XPAR_BRAM_1_ECC_ONOFF_REGISTER 0 -#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 0x00003FFF - - -/******************************************************************/ - -/* Definitions for driver IOMODULE */ -#define XPAR_XIOMODULE_NUM_INSTANCES 1 - -/* Definitions for peripheral IOMODULE_0 */ -#define XPAR_IOMODULE_0_DEVICE_ID 0 -#define XPAR_IOMODULE_0_BASEADDR 0x80000000 -#define XPAR_IOMODULE_0_HIGHADDR 0x8000007F -#define XPAR_IOMODULE_0_MASK 0xC0000000 -#define XPAR_IOMODULE_0_FREQ 150000000 -#define XPAR_IOMODULE_0_USE_UART_RX 0 -#define XPAR_IOMODULE_0_USE_UART_TX 0 -#define XPAR_IOMODULE_0_UART_BAUDRATE 9600 -#define XPAR_IOMODULE_0_UART_PROG_BAUDRATE 0 -#define XPAR_IOMODULE_0_UART_DATA_BITS 8 -#define XPAR_IOMODULE_0_UART_USE_PARITY 0 -#define XPAR_IOMODULE_0_UART_ODD_PARITY 0 -#define XPAR_IOMODULE_0_UART_RX_INTERRUPT 0 -#define XPAR_IOMODULE_0_UART_TX_INTERRUPT 0 -#define XPAR_IOMODULE_0_UART_ERROR_INTERRUPT 0 -#define XPAR_IOMODULE_0_USE_FIT1 0 -#define XPAR_IOMODULE_0_FIT1_NO_CLOCKS 6216 -#define XPAR_IOMODULE_0_FIT1_INTERRUPT 0 -#define XPAR_IOMODULE_0_USE_FIT2 0 -#define XPAR_IOMODULE_0_FIT2_NO_CLOCKS 6216 -#define XPAR_IOMODULE_0_FIT2_INTERRUPT 0 -#define XPAR_IOMODULE_0_USE_FIT3 0 -#define XPAR_IOMODULE_0_FIT3_NO_CLOCKS 6216 -#define XPAR_IOMODULE_0_FIT3_INTERRUPT 0 -#define XPAR_IOMODULE_0_USE_FIT4 0 -#define XPAR_IOMODULE_0_FIT4_NO_CLOCKS 6216 -#define XPAR_IOMODULE_0_FIT4_INTERRUPT 0 -#define XPAR_IOMODULE_0_USE_PIT1 0 -#define XPAR_IOMODULE_0_PIT1_SIZE 32 -#define XPAR_IOMODULE_0_PIT1_READABLE 1 -#define XPAR_IOMODULE_0_PIT1_PRESCALER 0 -#define XPAR_IOMODULE_0_PIT1_INTERRUPT 0 -#define XPAR_IOMODULE_0_USE_PIT2 0 -#define XPAR_IOMODULE_0_PIT2_SIZE 32 -#define XPAR_IOMODULE_0_PIT2_READABLE 1 -#define XPAR_IOMODULE_0_PIT2_PRESCALER 0 -#define XPAR_IOMODULE_0_PIT2_INTERRUPT 0 -#define XPAR_IOMODULE_0_USE_PIT3 0 -#define XPAR_IOMODULE_0_PIT3_SIZE 32 -#define XPAR_IOMODULE_0_PIT3_READABLE 1 -#define XPAR_IOMODULE_0_PIT3_PRESCALER 0 -#define XPAR_IOMODULE_0_PIT3_INTERRUPT 0 -#define XPAR_IOMODULE_0_USE_PIT4 0 -#define XPAR_IOMODULE_0_PIT4_SIZE 32 -#define XPAR_IOMODULE_0_PIT4_READABLE 1 -#define XPAR_IOMODULE_0_PIT4_PRESCALER 0 -#define XPAR_IOMODULE_0_PIT4_INTERRUPT 0 -#define XPAR_IOMODULE_0_USE_GPO1 1 -#define XPAR_IOMODULE_0_GPO1_SIZE 16 -#define XPAR_IOMODULE_0_USE_GPO2 1 -#define XPAR_IOMODULE_0_GPO2_SIZE 16 -#define XPAR_IOMODULE_0_USE_GPO3 1 -#define XPAR_IOMODULE_0_GPO3_SIZE 1 -#define XPAR_IOMODULE_0_USE_GPO4 1 -#define XPAR_IOMODULE_0_GPO4_SIZE 6 -#define XPAR_IOMODULE_0_USE_GPI1 1 -#define XPAR_IOMODULE_0_GPI1_SIZE 8 -#define XPAR_IOMODULE_0_GPI1_INTERRUPT 0 -#define XPAR_IOMODULE_0_USE_GPI2 1 -#define XPAR_IOMODULE_0_GPI2_SIZE 1 -#define XPAR_IOMODULE_0_GPI2_INTERRUPT 3 -#define XPAR_IOMODULE_0_USE_GPI3 1 -#define XPAR_IOMODULE_0_GPI3_SIZE 2 -#define XPAR_IOMODULE_0_GPI3_INTERRUPT 0 -#define XPAR_IOMODULE_0_USE_GPI4 0 -#define XPAR_IOMODULE_0_GPI4_SIZE 32 -#define XPAR_IOMODULE_0_GPI4_INTERRUPT 0 -#define XPAR_IOMODULE_0_INTC_USE_EXT_INTR 0 -#define XPAR_IOMODULE_0_INTC_INTR_SIZE 1 -#define XPAR_IOMODULE_0_INTC_HAS_FAST 1 -#define XPAR_IOMODULE_0_INTC_BASE_VECTORS 0 -#define XPAR_IOMODULE_0_USE_IO_BUS 0 -#define XPAR_IOMODULE_0_IO_BASEADDR 0xC0000000 -#define XPAR_IOMODULE_0_IO_HIGHADDR 0xFFFFFFFF -#define XPAR_IOMODULE_0_IO_MASK 0xC0000000 - - -/******************************************************************/ - - -/* Additional definitions for peripheral IOMODULE_0 */ -#define XPAR_IOMODULE_0_GPO1_INIT 0x00000000 -#define XPAR_IOMODULE_0_GPO2_INIT 0x00000000 -#define XPAR_IOMODULE_0_GPO3_INIT 0x00000000 -#define XPAR_IOMODULE_0_GPO4_INIT 0x00000000 -#define XPAR_IOMODULE_0_INTC_LEVEL_EDGE 0x0000 -#define XPAR_IOMODULE_0_INTC_POSITIVE 0xFFFF - - -/******************************************************************/ - -#define XPAR_IOMODULE_INTC_MAX_INTR_SIZE 13 -#define XPAR_IOMODULE_SINGLE_BASEADDR 0x80000000 -#define XPAR_IOMODULE_SINGLE_HIGHADDR 0x8000007F -#define XPAR_IOMODULE_INTC_SINGLE_DEVICE_ID XPAR_IOMODULE_0_DEVICE_ID - -/******************************************************************/ - - - -/******************************************************************/ - -/* Definitions for bus frequencies */ -/******************************************************************/ - -/* Canonical definitions for bus frequencies */ -/******************************************************************/ - -#define XPAR_CPU_CORE_CLOCK_FREQ_HZ 150000000 -#define XPAR_MICROBLAZE_CORE_CLOCK_FREQ_HZ 150000000 - -/******************************************************************/ - - -/* Definitions for peripheral MICROBLAZE_MCS */ -#define XPAR_MICROBLAZE_MCS_SCO 0 -#define XPAR_MICROBLAZE_MCS_FREQ 150000000 -#define XPAR_MICROBLAZE_MCS_DATA_SIZE 32 -#define XPAR_MICROBLAZE_MCS_DYNAMIC_BUS_SIZING 1 -#define XPAR_MICROBLAZE_MCS_AVOID_PRIMITIVES 0 -#define XPAR_MICROBLAZE_MCS_FAULT_TOLERANT 0 -#define XPAR_MICROBLAZE_MCS_ECC_USE_CE_EXCEPTION 0 -#define XPAR_MICROBLAZE_MCS_LOCKSTEP_SLAVE 0 -#define XPAR_MICROBLAZE_MCS_ENDIANNESS 1 -#define XPAR_MICROBLAZE_MCS_AREA_OPTIMIZED 1 -#define XPAR_MICROBLAZE_MCS_OPTIMIZATION 0 -#define XPAR_MICROBLAZE_MCS_INTERCONNECT 2 -#define XPAR_MICROBLAZE_MCS_STREAM_INTERCONNECT 0 -#define XPAR_MICROBLAZE_MCS_DPLB_DWIDTH 32 -#define XPAR_MICROBLAZE_MCS_DPLB_NATIVE_DWIDTH 32 -#define XPAR_MICROBLAZE_MCS_DPLB_BURST_EN 0 -#define XPAR_MICROBLAZE_MCS_DPLB_P2P 0 -#define XPAR_MICROBLAZE_MCS_IPLB_DWIDTH 32 -#define XPAR_MICROBLAZE_MCS_IPLB_NATIVE_DWIDTH 32 -#define XPAR_MICROBLAZE_MCS_IPLB_BURST_EN 0 -#define XPAR_MICROBLAZE_MCS_IPLB_P2P 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_DP_SUPPORTS_THREADS 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_DP_THREAD_ID_WIDTH 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_DP_SUPPORTS_READ 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_DP_SUPPORTS_WRITE 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_DP_SUPPORTS_NARROW_BURST 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_DP_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M_AXI_DP_ADDR_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M_AXI_DP_PROTOCOL AXI4LITE -#define XPAR_MICROBLAZE_MCS_M_AXI_DP_EXCLUSIVE_ACCESS 0 -#define XPAR_MICROBLAZE_MCS_INTERCONNECT_M_AXI_DP_READ_ISSUING 1 -#define XPAR_MICROBLAZE_MCS_INTERCONNECT_M_AXI_DP_WRITE_ISSUING 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_IP_SUPPORTS_THREADS 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_IP_THREAD_ID_WIDTH 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_IP_SUPPORTS_READ 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_IP_SUPPORTS_WRITE 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_IP_SUPPORTS_NARROW_BURST 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_IP_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M_AXI_IP_ADDR_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M_AXI_IP_PROTOCOL AXI4LITE -#define XPAR_MICROBLAZE_MCS_INTERCONNECT_M_AXI_IP_READ_ISSUING 1 -#define XPAR_MICROBLAZE_MCS_D_AXI 0 -#define XPAR_MICROBLAZE_MCS_D_PLB 0 -#define XPAR_MICROBLAZE_MCS_D_LMB 1 -#define XPAR_MICROBLAZE_MCS_I_AXI 0 -#define XPAR_MICROBLAZE_MCS_I_PLB 0 -#define XPAR_MICROBLAZE_MCS_I_LMB 1 -#define XPAR_MICROBLAZE_MCS_USE_MSR_INSTR 0 -#define XPAR_MICROBLAZE_MCS_USE_PCMP_INSTR 0 -#define XPAR_MICROBLAZE_MCS_USE_BARREL 0 -#define XPAR_MICROBLAZE_MCS_USE_DIV 0 -#define XPAR_MICROBLAZE_MCS_USE_HW_MUL 0 -#define XPAR_MICROBLAZE_MCS_USE_FPU 0 -#define XPAR_MICROBLAZE_MCS_USE_REORDER_INSTR 0 -#define XPAR_MICROBLAZE_MCS_UNALIGNED_EXCEPTIONS 0 -#define XPAR_MICROBLAZE_MCS_ILL_OPCODE_EXCEPTION 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_I_BUS_EXCEPTION 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_D_BUS_EXCEPTION 0 -#define XPAR_MICROBLAZE_MCS_IPLB_BUS_EXCEPTION 0 -#define XPAR_MICROBLAZE_MCS_DPLB_BUS_EXCEPTION 0 -#define XPAR_MICROBLAZE_MCS_DIV_ZERO_EXCEPTION 0 -#define XPAR_MICROBLAZE_MCS_FPU_EXCEPTION 0 -#define XPAR_MICROBLAZE_MCS_FSL_EXCEPTION 0 -#define XPAR_MICROBLAZE_MCS_USE_STACK_PROTECTION 0 -#define XPAR_MICROBLAZE_MCS_PVR 0 -#define XPAR_MICROBLAZE_MCS_PVR_USER1 0x00 -#define XPAR_MICROBLAZE_MCS_PVR_USER2 0x00000000 -#define XPAR_MICROBLAZE_MCS_DEBUG_ENABLED 0 -#define XPAR_MICROBLAZE_MCS_NUMBER_OF_PC_BRK 1 -#define XPAR_MICROBLAZE_MCS_NUMBER_OF_RD_ADDR_BRK 0 -#define XPAR_MICROBLAZE_MCS_NUMBER_OF_WR_ADDR_BRK 0 -#define XPAR_MICROBLAZE_MCS_INTERRUPT_IS_EDGE 0 -#define XPAR_MICROBLAZE_MCS_EDGE_IS_POSITIVE 1 -#define XPAR_MICROBLAZE_MCS_RESET_MSR 0x00000000 -#define XPAR_MICROBLAZE_MCS_OPCODE_0X0_ILLEGAL 0 -#define XPAR_MICROBLAZE_MCS_FSL_LINKS 0 -#define XPAR_MICROBLAZE_MCS_FSL_DATA_SIZE 32 -#define XPAR_MICROBLAZE_MCS_USE_EXTENDED_FSL_INSTR 0 -#define XPAR_MICROBLAZE_MCS_M0_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S0_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M1_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S1_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M2_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S2_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M3_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S3_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M4_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S4_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M5_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S5_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M6_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S6_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M7_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S7_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M8_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S8_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M9_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S9_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M10_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S10_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M11_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S11_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M12_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S12_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M13_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S13_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M14_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S14_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M15_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_S15_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_MCS_M0_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S0_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M1_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S1_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M2_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S2_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M3_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S3_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M4_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S4_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M5_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S5_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M6_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S6_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M7_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S7_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M8_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S8_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M9_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S9_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M10_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S10_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M11_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S11_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M12_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S12_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M13_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S13_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M14_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S14_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M15_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_S15_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_ICACHE_BASEADDR 0x00000000 -#define XPAR_MICROBLAZE_MCS_ICACHE_HIGHADDR 0x3FFFFFFF -#define XPAR_MICROBLAZE_MCS_USE_ICACHE 0 -#define XPAR_MICROBLAZE_MCS_ALLOW_ICACHE_WR 1 -#define XPAR_MICROBLAZE_MCS_ADDR_TAG_BITS 0 -#define XPAR_MICROBLAZE_MCS_CACHE_BYTE_SIZE 16384 -#define XPAR_MICROBLAZE_MCS_ICACHE_USE_FSL 0 -#define XPAR_MICROBLAZE_MCS_ICACHE_LINE_LEN 4 -#define XPAR_MICROBLAZE_MCS_ICACHE_ALWAYS_USED 0 -#define XPAR_MICROBLAZE_MCS_ICACHE_INTERFACE 0 -#define XPAR_MICROBLAZE_MCS_ICACHE_VICTIMS 0 -#define XPAR_MICROBLAZE_MCS_ICACHE_STREAMS 0 -#define XPAR_MICROBLAZE_MCS_ICACHE_FORCE_TAG_LUTRAM 0 -#define XPAR_MICROBLAZE_MCS_ICACHE_DATA_WIDTH 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_SUPPORTS_THREADS 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_THREAD_ID_WIDTH 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_SUPPORTS_READ 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_SUPPORTS_WRITE 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_SUPPORTS_NARROW_BURST 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_ADDR_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_PROTOCOL AXI4 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_USER_VALUE 0b11111 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_SUPPORTS_USER_SIGNALS 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_AWUSER_WIDTH 5 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_ARUSER_WIDTH 5 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_WUSER_WIDTH 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_RUSER_WIDTH 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_IC_BUSER_WIDTH 1 -#define XPAR_MICROBLAZE_MCS_INTERCONNECT_M_AXI_IC_READ_ISSUING 2 -#define XPAR_MICROBLAZE_MCS_DCACHE_BASEADDR 0x00000000 -#define XPAR_MICROBLAZE_MCS_DCACHE_HIGHADDR 0x3FFFFFFF -#define XPAR_MICROBLAZE_MCS_USE_DCACHE 0 -#define XPAR_MICROBLAZE_MCS_ALLOW_DCACHE_WR 1 -#define XPAR_MICROBLAZE_MCS_DCACHE_ADDR_TAG 0 -#define XPAR_MICROBLAZE_MCS_DCACHE_BYTE_SIZE 16384 -#define XPAR_MICROBLAZE_MCS_DCACHE_USE_FSL 0 -#define XPAR_MICROBLAZE_MCS_DCACHE_LINE_LEN 4 -#define XPAR_MICROBLAZE_MCS_DCACHE_ALWAYS_USED 0 -#define XPAR_MICROBLAZE_MCS_DCACHE_INTERFACE 0 -#define XPAR_MICROBLAZE_MCS_DCACHE_USE_WRITEBACK 0 -#define XPAR_MICROBLAZE_MCS_DCACHE_VICTIMS 0 -#define XPAR_MICROBLAZE_MCS_DCACHE_FORCE_TAG_LUTRAM 0 -#define XPAR_MICROBLAZE_MCS_DCACHE_DATA_WIDTH 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_SUPPORTS_THREADS 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_THREAD_ID_WIDTH 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_SUPPORTS_READ 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_SUPPORTS_WRITE 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_SUPPORTS_NARROW_BURST 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_ADDR_WIDTH 32 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_PROTOCOL AXI4 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_EXCLUSIVE_ACCESS 0 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_USER_VALUE 0b11111 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_SUPPORTS_USER_SIGNALS 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_AWUSER_WIDTH 5 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_ARUSER_WIDTH 5 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_WUSER_WIDTH 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_RUSER_WIDTH 1 -#define XPAR_MICROBLAZE_MCS_M_AXI_DC_BUSER_WIDTH 1 -#define XPAR_MICROBLAZE_MCS_INTERCONNECT_M_AXI_DC_READ_ISSUING 2 -#define XPAR_MICROBLAZE_MCS_INTERCONNECT_M_AXI_DC_WRITE_ISSUING 32 -#define XPAR_MICROBLAZE_MCS_USE_MMU 0 -#define XPAR_MICROBLAZE_MCS_MMU_DTLB_SIZE 4 -#define XPAR_MICROBLAZE_MCS_MMU_ITLB_SIZE 2 -#define XPAR_MICROBLAZE_MCS_MMU_TLB_ACCESS 3 -#define XPAR_MICROBLAZE_MCS_MMU_ZONES 16 -#define XPAR_MICROBLAZE_MCS_MMU_PRIVILEGED_INSTR 0 -#define XPAR_MICROBLAZE_MCS_USE_INTERRUPT 2 -#define XPAR_MICROBLAZE_MCS_USE_EXT_BRK 0 -#define XPAR_MICROBLAZE_MCS_USE_EXT_NM_BRK 0 -#define XPAR_MICROBLAZE_MCS_USE_BRANCH_TARGET_CACHE 0 -#define XPAR_MICROBLAZE_MCS_BRANCH_TARGET_CACHE_SIZE 0 -#define XPAR_MICROBLAZE_MCS_PC_WIDTH 32 - -/******************************************************************/ - -#define XPAR_CPU_ID 0 -#define XPAR_MICROBLAZE_ID 0 -#define XPAR_MICROBLAZE_SCO 0 -#define XPAR_MICROBLAZE_FREQ 150000000 -#define XPAR_MICROBLAZE_DATA_SIZE 32 -#define XPAR_MICROBLAZE_DYNAMIC_BUS_SIZING 1 -#define XPAR_MICROBLAZE_AVOID_PRIMITIVES 0 -#define XPAR_MICROBLAZE_FAULT_TOLERANT 0 -#define XPAR_MICROBLAZE_ECC_USE_CE_EXCEPTION 0 -#define XPAR_MICROBLAZE_LOCKSTEP_SLAVE 0 -#define XPAR_MICROBLAZE_ENDIANNESS 1 -#define XPAR_MICROBLAZE_AREA_OPTIMIZED 1 -#define XPAR_MICROBLAZE_OPTIMIZATION 0 -#define XPAR_MICROBLAZE_INTERCONNECT 2 -#define XPAR_MICROBLAZE_STREAM_INTERCONNECT 0 -#define XPAR_MICROBLAZE_DPLB_DWIDTH 32 -#define XPAR_MICROBLAZE_DPLB_NATIVE_DWIDTH 32 -#define XPAR_MICROBLAZE_DPLB_BURST_EN 0 -#define XPAR_MICROBLAZE_DPLB_P2P 0 -#define XPAR_MICROBLAZE_IPLB_DWIDTH 32 -#define XPAR_MICROBLAZE_IPLB_NATIVE_DWIDTH 32 -#define XPAR_MICROBLAZE_IPLB_BURST_EN 0 -#define XPAR_MICROBLAZE_IPLB_P2P 0 -#define XPAR_MICROBLAZE_M_AXI_DP_SUPPORTS_THREADS 0 -#define XPAR_MICROBLAZE_M_AXI_DP_THREAD_ID_WIDTH 1 -#define XPAR_MICROBLAZE_M_AXI_DP_SUPPORTS_READ 1 -#define XPAR_MICROBLAZE_M_AXI_DP_SUPPORTS_WRITE 1 -#define XPAR_MICROBLAZE_M_AXI_DP_SUPPORTS_NARROW_BURST 0 -#define XPAR_MICROBLAZE_M_AXI_DP_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M_AXI_DP_ADDR_WIDTH 32 -#define XPAR_MICROBLAZE_M_AXI_DP_PROTOCOL AXI4LITE -#define XPAR_MICROBLAZE_M_AXI_DP_EXCLUSIVE_ACCESS 0 -#define XPAR_MICROBLAZE_INTERCONNECT_M_AXI_DP_READ_ISSUING 1 -#define XPAR_MICROBLAZE_INTERCONNECT_M_AXI_DP_WRITE_ISSUING 1 -#define XPAR_MICROBLAZE_M_AXI_IP_SUPPORTS_THREADS 0 -#define XPAR_MICROBLAZE_M_AXI_IP_THREAD_ID_WIDTH 1 -#define XPAR_MICROBLAZE_M_AXI_IP_SUPPORTS_READ 1 -#define XPAR_MICROBLAZE_M_AXI_IP_SUPPORTS_WRITE 0 -#define XPAR_MICROBLAZE_M_AXI_IP_SUPPORTS_NARROW_BURST 0 -#define XPAR_MICROBLAZE_M_AXI_IP_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M_AXI_IP_ADDR_WIDTH 32 -#define XPAR_MICROBLAZE_M_AXI_IP_PROTOCOL AXI4LITE -#define XPAR_MICROBLAZE_INTERCONNECT_M_AXI_IP_READ_ISSUING 1 -#define XPAR_MICROBLAZE_D_AXI 0 -#define XPAR_MICROBLAZE_D_PLB 0 -#define XPAR_MICROBLAZE_D_LMB 1 -#define XPAR_MICROBLAZE_I_AXI 0 -#define XPAR_MICROBLAZE_I_PLB 0 -#define XPAR_MICROBLAZE_I_LMB 1 -#define XPAR_MICROBLAZE_USE_MSR_INSTR 0 -#define XPAR_MICROBLAZE_USE_PCMP_INSTR 0 -#define XPAR_MICROBLAZE_USE_BARREL 0 -#define XPAR_MICROBLAZE_USE_DIV 0 -#define XPAR_MICROBLAZE_USE_HW_MUL 0 -#define XPAR_MICROBLAZE_USE_FPU 0 -#define XPAR_MICROBLAZE_USE_REORDER_INSTR 0 -#define XPAR_MICROBLAZE_UNALIGNED_EXCEPTIONS 0 -#define XPAR_MICROBLAZE_ILL_OPCODE_EXCEPTION 0 -#define XPAR_MICROBLAZE_M_AXI_I_BUS_EXCEPTION 0 -#define XPAR_MICROBLAZE_M_AXI_D_BUS_EXCEPTION 0 -#define XPAR_MICROBLAZE_IPLB_BUS_EXCEPTION 0 -#define XPAR_MICROBLAZE_DPLB_BUS_EXCEPTION 0 -#define XPAR_MICROBLAZE_DIV_ZERO_EXCEPTION 0 -#define XPAR_MICROBLAZE_FPU_EXCEPTION 0 -#define XPAR_MICROBLAZE_FSL_EXCEPTION 0 -#define XPAR_MICROBLAZE_USE_STACK_PROTECTION 0 -#define XPAR_MICROBLAZE_PVR 0 -#define XPAR_MICROBLAZE_PVR_USER1 0x00 -#define XPAR_MICROBLAZE_PVR_USER2 0x00000000 -#define XPAR_MICROBLAZE_DEBUG_ENABLED 0 -#define XPAR_MICROBLAZE_NUMBER_OF_PC_BRK 1 -#define XPAR_MICROBLAZE_NUMBER_OF_RD_ADDR_BRK 0 -#define XPAR_MICROBLAZE_NUMBER_OF_WR_ADDR_BRK 0 -#define XPAR_MICROBLAZE_INTERRUPT_IS_EDGE 0 -#define XPAR_MICROBLAZE_EDGE_IS_POSITIVE 1 -#define XPAR_MICROBLAZE_RESET_MSR 0x00000000 -#define XPAR_MICROBLAZE_OPCODE_0X0_ILLEGAL 0 -#define XPAR_MICROBLAZE_FSL_LINKS 0 -#define XPAR_MICROBLAZE_FSL_DATA_SIZE 32 -#define XPAR_MICROBLAZE_USE_EXTENDED_FSL_INSTR 0 -#define XPAR_MICROBLAZE_M0_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S0_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M1_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S1_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M2_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S2_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M3_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S3_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M4_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S4_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M5_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S5_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M6_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S6_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M7_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S7_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M8_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S8_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M9_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S9_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M10_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S10_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M11_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S11_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M12_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S12_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M13_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S13_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M14_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S14_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M15_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_S15_AXIS_PROTOCOL GENERIC -#define XPAR_MICROBLAZE_M0_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S0_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M1_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S1_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M2_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S2_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M3_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S3_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M4_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S4_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M5_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S5_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M6_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S6_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M7_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S7_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M8_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S8_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M9_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S9_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M10_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S10_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M11_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S11_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M12_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S12_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M13_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S13_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M14_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S14_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M15_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_S15_AXIS_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_ICACHE_BASEADDR 0x00000000 -#define XPAR_MICROBLAZE_ICACHE_HIGHADDR 0x3FFFFFFF -#define XPAR_MICROBLAZE_USE_ICACHE 0 -#define XPAR_MICROBLAZE_ALLOW_ICACHE_WR 1 -#define XPAR_MICROBLAZE_ADDR_TAG_BITS 0 -#define XPAR_MICROBLAZE_CACHE_BYTE_SIZE 16384 -#define XPAR_MICROBLAZE_ICACHE_USE_FSL 0 -#define XPAR_MICROBLAZE_ICACHE_LINE_LEN 4 -#define XPAR_MICROBLAZE_ICACHE_ALWAYS_USED 0 -#define XPAR_MICROBLAZE_ICACHE_INTERFACE 0 -#define XPAR_MICROBLAZE_ICACHE_VICTIMS 0 -#define XPAR_MICROBLAZE_ICACHE_STREAMS 0 -#define XPAR_MICROBLAZE_ICACHE_FORCE_TAG_LUTRAM 0 -#define XPAR_MICROBLAZE_ICACHE_DATA_WIDTH 0 -#define XPAR_MICROBLAZE_M_AXI_IC_SUPPORTS_THREADS 0 -#define XPAR_MICROBLAZE_M_AXI_IC_THREAD_ID_WIDTH 1 -#define XPAR_MICROBLAZE_M_AXI_IC_SUPPORTS_READ 1 -#define XPAR_MICROBLAZE_M_AXI_IC_SUPPORTS_WRITE 0 -#define XPAR_MICROBLAZE_M_AXI_IC_SUPPORTS_NARROW_BURST 0 -#define XPAR_MICROBLAZE_M_AXI_IC_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M_AXI_IC_ADDR_WIDTH 32 -#define XPAR_MICROBLAZE_M_AXI_IC_PROTOCOL AXI4 -#define XPAR_MICROBLAZE_M_AXI_IC_USER_VALUE 0b11111 -#define XPAR_MICROBLAZE_M_AXI_IC_SUPPORTS_USER_SIGNALS 1 -#define XPAR_MICROBLAZE_M_AXI_IC_AWUSER_WIDTH 5 -#define XPAR_MICROBLAZE_M_AXI_IC_ARUSER_WIDTH 5 -#define XPAR_MICROBLAZE_M_AXI_IC_WUSER_WIDTH 1 -#define XPAR_MICROBLAZE_M_AXI_IC_RUSER_WIDTH 1 -#define XPAR_MICROBLAZE_M_AXI_IC_BUSER_WIDTH 1 -#define XPAR_MICROBLAZE_INTERCONNECT_M_AXI_IC_READ_ISSUING 2 -#define XPAR_MICROBLAZE_DCACHE_BASEADDR 0x00000000 -#define XPAR_MICROBLAZE_DCACHE_HIGHADDR 0x3FFFFFFF -#define XPAR_MICROBLAZE_USE_DCACHE 0 -#define XPAR_MICROBLAZE_ALLOW_DCACHE_WR 1 -#define XPAR_MICROBLAZE_DCACHE_ADDR_TAG 0 -#define XPAR_MICROBLAZE_DCACHE_BYTE_SIZE 16384 -#define XPAR_MICROBLAZE_DCACHE_USE_FSL 0 -#define XPAR_MICROBLAZE_DCACHE_LINE_LEN 4 -#define XPAR_MICROBLAZE_DCACHE_ALWAYS_USED 0 -#define XPAR_MICROBLAZE_DCACHE_INTERFACE 0 -#define XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK 0 -#define XPAR_MICROBLAZE_DCACHE_VICTIMS 0 -#define XPAR_MICROBLAZE_DCACHE_FORCE_TAG_LUTRAM 0 -#define XPAR_MICROBLAZE_DCACHE_DATA_WIDTH 0 -#define XPAR_MICROBLAZE_M_AXI_DC_SUPPORTS_THREADS 0 -#define XPAR_MICROBLAZE_M_AXI_DC_THREAD_ID_WIDTH 1 -#define XPAR_MICROBLAZE_M_AXI_DC_SUPPORTS_READ 1 -#define XPAR_MICROBLAZE_M_AXI_DC_SUPPORTS_WRITE 1 -#define XPAR_MICROBLAZE_M_AXI_DC_SUPPORTS_NARROW_BURST 0 -#define XPAR_MICROBLAZE_M_AXI_DC_DATA_WIDTH 32 -#define XPAR_MICROBLAZE_M_AXI_DC_ADDR_WIDTH 32 -#define XPAR_MICROBLAZE_M_AXI_DC_PROTOCOL AXI4 -#define XPAR_MICROBLAZE_M_AXI_DC_EXCLUSIVE_ACCESS 0 -#define XPAR_MICROBLAZE_M_AXI_DC_USER_VALUE 0b11111 -#define XPAR_MICROBLAZE_M_AXI_DC_SUPPORTS_USER_SIGNALS 1 -#define XPAR_MICROBLAZE_M_AXI_DC_AWUSER_WIDTH 5 -#define XPAR_MICROBLAZE_M_AXI_DC_ARUSER_WIDTH 5 -#define XPAR_MICROBLAZE_M_AXI_DC_WUSER_WIDTH 1 -#define XPAR_MICROBLAZE_M_AXI_DC_RUSER_WIDTH 1 -#define XPAR_MICROBLAZE_M_AXI_DC_BUSER_WIDTH 1 -#define XPAR_MICROBLAZE_INTERCONNECT_M_AXI_DC_READ_ISSUING 2 -#define XPAR_MICROBLAZE_INTERCONNECT_M_AXI_DC_WRITE_ISSUING 32 -#define XPAR_MICROBLAZE_USE_MMU 0 -#define XPAR_MICROBLAZE_MMU_DTLB_SIZE 4 -#define XPAR_MICROBLAZE_MMU_ITLB_SIZE 2 -#define XPAR_MICROBLAZE_MMU_TLB_ACCESS 3 -#define XPAR_MICROBLAZE_MMU_ZONES 16 -#define XPAR_MICROBLAZE_MMU_PRIVILEGED_INSTR 0 -#define XPAR_MICROBLAZE_USE_INTERRUPT 2 -#define XPAR_MICROBLAZE_USE_EXT_BRK 0 -#define XPAR_MICROBLAZE_USE_EXT_NM_BRK 0 -#define XPAR_MICROBLAZE_USE_BRANCH_TARGET_CACHE 0 -#define XPAR_MICROBLAZE_BRANCH_TARGET_CACHE_SIZE 0 -#define XPAR_MICROBLAZE_PC_WIDTH 32 -#define XPAR_MICROBLAZE_HW_VER "8.40.a" - -/******************************************************************/ - diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xstatus.h b/software/LED_Controller_bsp/microblaze_mcs/include/xstatus.h deleted file mode 100755 index e80558f..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xstatus.h +++ /dev/null @@ -1,418 +0,0 @@ -/****************************************************************************** -* -* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" -* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND -* SOLUTIONS FOR XILINX DEVICES. 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. -* -* (c) Copyright 2002-2011 Xilinx Inc. -* All rights reserved. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xstatus.h -* -* This file contains Xilinx software status codes. Status codes have their -* own data type called int. These codes are used throughout the Xilinx -* device drivers. -* -******************************************************************************/ - -#ifndef XSTATUS_H /* prevent circular inclusions */ -#define XSTATUS_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ - -#include "xbasic_types.h" - -/************************** Constant Definitions *****************************/ - -/*********************** Common statuses 0 - 500 *****************************/ - -#define XST_SUCCESS 0L -#define XST_FAILURE 1L -#define XST_DEVICE_NOT_FOUND 2L -#define XST_DEVICE_BLOCK_NOT_FOUND 3L -#define XST_INVALID_VERSION 4L -#define XST_DEVICE_IS_STARTED 5L -#define XST_DEVICE_IS_STOPPED 6L -#define XST_FIFO_ERROR 7L /* an error occurred during an - operation with a FIFO such as - an underrun or overrun, this - error requires the device to - be reset */ -#define XST_RESET_ERROR 8L /* an error occurred which requires - the device to be reset */ -#define XST_DMA_ERROR 9L /* a DMA error occurred, this error - typically requires the device - using the DMA to be reset */ -#define XST_NOT_POLLED 10L /* the device is not configured for - polled mode operation */ -#define XST_FIFO_NO_ROOM 11L /* a FIFO did not have room to put - the specified data into */ -#define XST_BUFFER_TOO_SMALL 12L /* the buffer is not large enough - to hold the expected data */ -#define XST_NO_DATA 13L /* there was no data available */ -#define XST_REGISTER_ERROR 14L /* a register did not contain the - expected value */ -#define XST_INVALID_PARAM 15L /* an invalid parameter was passed - into the function */ -#define XST_NOT_SGDMA 16L /* the device is not configured for - scatter-gather DMA operation */ -#define XST_LOOPBACK_ERROR 17L /* a loopback test failed */ -#define XST_NO_CALLBACK 18L /* a callback has not yet been - registered */ -#define XST_NO_FEATURE 19L /* device is not configured with - the requested feature */ -#define XST_NOT_INTERRUPT 20L /* device is not configured for - interrupt mode operation */ -#define XST_DEVICE_BUSY 21L /* device is busy */ -#define XST_ERROR_COUNT_MAX 22L /* the error counters of a device - have maxed out */ -#define XST_IS_STARTED 23L /* used when part of device is - already started i.e. - sub channel */ -#define XST_IS_STOPPED 24L /* used when part of device is - already stopped i.e. - sub channel */ -#define XST_DATA_LOST 26L /* driver defined error */ -#define XST_RECV_ERROR 27L /* generic receive error */ -#define XST_SEND_ERROR 28L /* generic transmit error */ -#define XST_NOT_ENABLED 29L /* a requested service is not - available because it has not - been enabled */ - -/***************** Utility Component statuses 401 - 500 *********************/ - -#define XST_MEMTEST_FAILED 401L /* memory test failed */ - - -/***************** Common Components statuses 501 - 1000 *********************/ - -/********************* Packet Fifo statuses 501 - 510 ************************/ - -#define XST_PFIFO_LACK_OF_DATA 501L /* not enough data in FIFO */ -#define XST_PFIFO_NO_ROOM 502L /* not enough room in FIFO */ -#define XST_PFIFO_BAD_REG_VALUE 503L /* self test, a register value - was invalid after reset */ -#define XST_PFIFO_ERROR 504L /* generic packet FIFO error */ -#define XST_PFIFO_DEADLOCK 505L /* packet FIFO is reporting - * empty and full simultaneously - */ - -/************************** DMA statuses 511 - 530 ***************************/ - -#define XST_DMA_TRANSFER_ERROR 511L /* self test, DMA transfer - failed */ -#define XST_DMA_RESET_REGISTER_ERROR 512L /* self test, a register value - was invalid after reset */ -#define XST_DMA_SG_LIST_EMPTY 513L /* scatter gather list contains - no buffer descriptors ready - to be processed */ -#define XST_DMA_SG_IS_STARTED 514L /* scatter gather not stopped */ -#define XST_DMA_SG_IS_STOPPED 515L /* scatter gather not running */ -#define XST_DMA_SG_LIST_FULL 517L /* all the buffer desciptors of - the scatter gather list are - being used */ -#define XST_DMA_SG_BD_LOCKED 518L /* the scatter gather buffer - descriptor which is to be - copied over in the scatter - list is locked */ -#define XST_DMA_SG_NOTHING_TO_COMMIT 519L /* no buffer descriptors have been - put into the scatter gather - list to be commited */ -#define XST_DMA_SG_COUNT_EXCEEDED 521L /* the packet count threshold - specified was larger than the - total # of buffer descriptors - in the scatter gather list */ -#define XST_DMA_SG_LIST_EXISTS 522L /* the scatter gather list has - already been created */ -#define XST_DMA_SG_NO_LIST 523L /* no scatter gather list has - been created */ -#define XST_DMA_SG_BD_NOT_COMMITTED 524L /* the buffer descriptor which was - being started was not committed - to the list */ -#define XST_DMA_SG_NO_DATA 525L /* the buffer descriptor to start - has already been used by the - hardware so it can't be reused - */ -#define XST_DMA_SG_LIST_ERROR 526L /* general purpose list access - error */ -#define XST_DMA_BD_ERROR 527L /* general buffer descriptor - error */ - -/************************** IPIF statuses 531 - 550 ***************************/ - -#define XST_IPIF_REG_WIDTH_ERROR 531L /* an invalid register width - was passed into the function */ -#define XST_IPIF_RESET_REGISTER_ERROR 532L /* the value of a register at - reset was not valid */ -#define XST_IPIF_DEVICE_STATUS_ERROR 533L /* a write to the device interrupt - status register did not read - back correctly */ -#define XST_IPIF_DEVICE_ACK_ERROR 534L /* the device interrupt status - register did not reset when - acked */ -#define XST_IPIF_DEVICE_ENABLE_ERROR 535L /* the device interrupt enable - register was not updated when - other registers changed */ -#define XST_IPIF_IP_STATUS_ERROR 536L /* a write to the IP interrupt - status register did not read - back correctly */ -#define XST_IPIF_IP_ACK_ERROR 537L /* the IP interrupt status register - did not reset when acked */ -#define XST_IPIF_IP_ENABLE_ERROR 538L /* IP interrupt enable register was - not updated correctly when other - registers changed */ -#define XST_IPIF_DEVICE_PENDING_ERROR 539L /* The device interrupt pending - register did not indicate the - expected value */ -#define XST_IPIF_DEVICE_ID_ERROR 540L /* The device interrupt ID register - did not indicate the expected - value */ -#define XST_IPIF_ERROR 541L /* generic ipif error */ - -/****************** Device specific statuses 1001 - 4095 *********************/ - -/********************* Ethernet statuses 1001 - 1050 *************************/ - -#define XST_EMAC_MEMORY_SIZE_ERROR 1001L /* Memory space is not big enough - * to hold the minimum number of - * buffers or descriptors */ -#define XST_EMAC_MEMORY_ALLOC_ERROR 1002L /* Memory allocation failed */ -#define XST_EMAC_MII_READ_ERROR 1003L /* MII read error */ -#define XST_EMAC_MII_BUSY 1004L /* An MII operation is in progress */ -#define XST_EMAC_OUT_OF_BUFFERS 1005L /* Driver is out of buffers */ -#define XST_EMAC_PARSE_ERROR 1006L /* Invalid driver init string */ -#define XST_EMAC_COLLISION_ERROR 1007L /* Excess deferral or late - * collision on polled send */ - -/*********************** UART statuses 1051 - 1075 ***************************/ -#define XST_UART - -#define XST_UART_INIT_ERROR 1051L -#define XST_UART_START_ERROR 1052L -#define XST_UART_CONFIG_ERROR 1053L -#define XST_UART_TEST_FAIL 1054L -#define XST_UART_BAUD_ERROR 1055L -#define XST_UART_BAUD_RANGE 1056L - - -/************************ IIC statuses 1076 - 1100 ***************************/ - -#define XST_IIC_SELFTEST_FAILED 1076 /* self test failed */ -#define XST_IIC_BUS_BUSY 1077 /* bus found busy */ -#define XST_IIC_GENERAL_CALL_ADDRESS 1078 /* mastersend attempted with */ - /* general call address */ -#define XST_IIC_STAND_REG_RESET_ERROR 1079 /* A non parameterizable reg */ - /* value after reset not valid */ -#define XST_IIC_TX_FIFO_REG_RESET_ERROR 1080 /* Tx fifo included in design */ - /* value after reset not valid */ -#define XST_IIC_RX_FIFO_REG_RESET_ERROR 1081 /* Rx fifo included in design */ - /* value after reset not valid */ -#define XST_IIC_TBA_REG_RESET_ERROR 1082 /* 10 bit addr incl in design */ - /* value after reset not valid */ -#define XST_IIC_CR_READBACK_ERROR 1083 /* Read of the control register */ - /* didn't return value written */ -#define XST_IIC_DTR_READBACK_ERROR 1084 /* Read of the data Tx reg */ - /* didn't return value written */ -#define XST_IIC_DRR_READBACK_ERROR 1085 /* Read of the data Receive reg */ - /* didn't return value written */ -#define XST_IIC_ADR_READBACK_ERROR 1086 /* Read of the data Tx reg */ - /* didn't return value written */ -#define XST_IIC_TBA_READBACK_ERROR 1087 /* Read of the 10 bit addr reg */ - /* didn't return written value */ -#define XST_IIC_NOT_SLAVE 1088 /* The device isn't a slave */ - -/*********************** ATMC statuses 1101 - 1125 ***************************/ - -#define XST_ATMC_ERROR_COUNT_MAX 1101L /* the error counters in the ATM - controller hit the max value - which requires the statistics - to be cleared */ - -/*********************** Flash statuses 1126 - 1150 **************************/ - -#define XST_FLASH_BUSY 1126L /* Flash is erasing or programming - */ -#define XST_FLASH_READY 1127L /* Flash is ready for commands */ -#define XST_FLASH_ERROR 1128L /* Flash had detected an internal - error. Use XFlash_DeviceControl - to retrieve device specific codes - */ -#define XST_FLASH_ERASE_SUSPENDED 1129L /* Flash is in suspended erase state - */ -#define XST_FLASH_WRITE_SUSPENDED 1130L /* Flash is in suspended write state - */ -#define XST_FLASH_PART_NOT_SUPPORTED 1131L /* Flash type not supported by - driver */ -#define XST_FLASH_NOT_SUPPORTED 1132L /* Operation not supported */ -#define XST_FLASH_TOO_MANY_REGIONS 1133L /* Too many erase regions */ -#define XST_FLASH_TIMEOUT_ERROR 1134L /* Programming or erase operation - aborted due to a timeout */ -#define XST_FLASH_ADDRESS_ERROR 1135L /* Accessed flash outside its - addressible range */ -#define XST_FLASH_ALIGNMENT_ERROR 1136L /* Write alignment error */ -#define XST_FLASH_BLOCKING_CALL_ERROR 1137L /* Couldn't return immediately from - write/erase function with - XFL_NON_BLOCKING_WRITE/ERASE - option cleared */ -#define XST_FLASH_CFI_QUERY_ERROR 1138L /* Failed to query the device */ - -/*********************** SPI statuses 1151 - 1175 ****************************/ - -#define XST_SPI_MODE_FAULT 1151 /* master was selected as slave */ -#define XST_SPI_TRANSFER_DONE 1152 /* data transfer is complete */ -#define XST_SPI_TRANSMIT_UNDERRUN 1153 /* slave underruns transmit register */ -#define XST_SPI_RECEIVE_OVERRUN 1154 /* device overruns receive register */ -#define XST_SPI_NO_SLAVE 1155 /* no slave has been selected yet */ -#define XST_SPI_TOO_MANY_SLAVES 1156 /* more than one slave is being - * selected */ -#define XST_SPI_NOT_MASTER 1157 /* operation is valid only as master */ -#define XST_SPI_SLAVE_ONLY 1158 /* device is configured as slave-only - */ -#define XST_SPI_SLAVE_MODE_FAULT 1159 /* slave was selected while disabled */ -#define XST_SPI_SLAVE_MODE 1160 /* device has been addressed as slave */ -#define XST_SPI_RECEIVE_NOT_EMPTY 1161 /* device received data in slave mode */ - -#define XST_SPI_COMMAND_ERROR 1162 /* unrecognised command - qspi only */ - -/********************** OPB Arbiter statuses 1176 - 1200 *********************/ - -#define XST_OPBARB_INVALID_PRIORITY 1176 /* the priority registers have either - * one master assigned to two or more - * priorities, or one master not - * assigned to any priority - */ -#define XST_OPBARB_NOT_SUSPENDED 1177 /* an attempt was made to modify the - * priority levels without first - * suspending the use of priority - * levels - */ -#define XST_OPBARB_PARK_NOT_ENABLED 1178 /* bus parking by id was enabled but - * bus parking was not enabled - */ -#define XST_OPBARB_NOT_FIXED_PRIORITY 1179 /* the arbiter must be in fixed - * priority mode to allow the - * priorities to be changed - */ - -/************************ Intc statuses 1201 - 1225 **************************/ - -#define XST_INTC_FAIL_SELFTEST 1201 /* self test failed */ -#define XST_INTC_CONNECT_ERROR 1202 /* interrupt already in use */ - -/********************** TmrCtr statuses 1226 - 1250 **************************/ - -#define XST_TMRCTR_TIMER_FAILED 1226 /* self test failed */ - -/********************** WdtTb statuses 1251 - 1275 ***************************/ - -#define XST_WDTTB_TIMER_FAILED 1251L - -/********************** PlbArb statuses 1276 - 1300 **************************/ - -#define XST_PLBARB_FAIL_SELFTEST 1276L - -/********************** Plb2Opb statuses 1301 - 1325 *************************/ - -#define XST_PLB2OPB_FAIL_SELFTEST 1301L - -/********************** Opb2Plb statuses 1326 - 1350 *************************/ - -#define XST_OPB2PLB_FAIL_SELFTEST 1326L - -/********************** SysAce statuses 1351 - 1360 **************************/ - -#define XST_SYSACE_NO_LOCK 1351L /* No MPU lock has been granted */ - -/********************** PCI Bridge statuses 1361 - 1375 **********************/ - -#define XST_PCI_INVALID_ADDRESS 1361L - -/********************** FlexRay constants 1400 - 1409 *************************/ - -#define XST_FR_TX_ERROR 1400 -#define XST_FR_TX_BUSY 1401 -#define XST_FR_BUF_LOCKED 1402 -#define XST_FR_NO_BUF 1403 - -/****************** USB constants 1410 - 1420 *******************************/ - -#define XST_USB_ALREADY_CONFIGURED 1410 -#define XST_USB_BUF_ALIGN_ERROR 1411 -#define XST_USB_NO_DESC_AVAILABLE 1412 -#define XST_USB_BUF_TOO_BIG 1413 -#define XST_USB_NO_BUF 1414 - -/****************** HWICAP constants 1421 - 1429 *****************************/ - -#define XST_HWICAP_WRITE_DONE 1421 - - -/****************** AXI VDMA constants 1430 - 1440 *****************************/ - -#define XST_VDMA_MISMATCH_ERROR 1430 - -/*********************** NAND Flash statuses 1441 - 1459 *********************/ - -#define XST_NAND_BUSY 1441L /* Flash is erasing or - * programming - */ -#define XST_NAND_READY 1442L /* Flash is ready for commands - */ -#define XST_NAND_ERROR 1443L /* Flash had detected an - * internal error. - */ -#define XST_NAND_PART_NOT_SUPPORTED 1444L /* Flash type not supported by - * driver - */ -#define XST_NAND_OPT_NOT_SUPPORTED 1445L /* Operation not supported - */ -#define XST_NAND_TIMEOUT_ERROR 1446L /* Programming or erase - * operation aborted due to a - * timeout - */ -#define XST_NAND_ADDRESS_ERROR 1447L /* Accessed flash outside its - * addressible range - */ -#define XST_NAND_ALIGNMENT_ERROR 1448L /* Write alignment error - */ -#define XST_NAND_PARAM_PAGE_ERROR 1449L /* Failed to read parameter - * page of the device - */ -#define XST_NAND_CACHE_ERROR 1450L /* Flash page buffer error - */ - -#define XST_NAND_WRITE_PROTECTED 1451L /* Flash is write protected - */ - -/**************************** Type Definitions *******************************/ - -typedef int XStatus; - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xutil.h b/software/LED_Controller_bsp/microblaze_mcs/include/xutil.h deleted file mode 100644 index 39469fe..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xutil.h +++ /dev/null @@ -1,154 +0,0 @@ -/* $Id: xutil.h,v 1.8 2007/05/04 21:55:59 wre Exp $ */ -/****************************************************************************** -* -* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" -* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND -* SOLUTIONS FOR XILINX DEVICES. 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. -* -* (c) Copyright 2002 Xilinx Inc. -* All rights reserved. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* -* @file xutil.h -* -* This file contains utility functions such as memory test functions. -* -* Memory test description -* -* A subset of the memory tests can be selected or all of the tests can be run -* in order. If there is an error detected by a subtest, the test stops and the -* failure code is returned. Further tests are not run even if all of the tests -* are selected. -* -* Subtest descriptions: -*
-* XUT_ALLMEMTESTS:
-*       Runs all of the following tests
-*
-* XUT_INCREMENT:
-*       Incrementing Value Test.
-*       This test starts at 'XUT_MEMTEST_INIT_VALUE' and uses the incrementing
-*       value as the test value for memory.
-*
-* XUT_WALKONES:
-*       Walking Ones Test.
-*       This test uses a walking '1' as the test value for memory.
-*       location 1 = 0x00000001
-*       location 2 = 0x00000002
-*       ...
-*
-* XUT_WALKZEROS:
-*       Walking Zero's Test.
-*       This test uses the inverse value of the walking ones test
-*       as the test value for memory.
-*       location 1 = 0xFFFFFFFE
-*       location 2 = 0xFFFFFFFD
-*       ...
-*
-* XUT_INVERSEADDR:
-*       Inverse Address Test.
-*       This test uses the inverse of the address of the location under test
-*       as the test value for memory.
-*
-* XUT_FIXEDPATTERN:
-*       Fixed Pattern Test.
-*       This test uses the provided patters as the test value for memory.
-*       If zero is provided as the pattern the test uses '0xDEADBEEF".
-* 
-* -* WARNING -* -* The tests are DESTRUCTIVE. Run before any initialized memory spaces -* have been set up. -* -* The address, Addr, provided to the memory tests is not checked for -* validity except for the NULL case. It is possible to provide a code-space -* pointer for this test to start with and ultimately destroy executable code -* causing random failures. -* -* @note -* -* Used for spaces where the address range of the region is smaller than -* the data width. If the memory range is greater than 2 ** width, -* the patterns used in XUT_WALKONES and XUT_WALKZEROS will repeat on a -* boundry of a power of two making it more difficult to detect addressing -* errors. The XUT_INCREMENT and XUT_INVERSEADDR tests suffer the same -* problem. Ideally, if large blocks of memory are to be tested, break -* them up into smaller regions of memory to allow the test patterns used -* not to repeat over the region tested. -* -*
-* MODIFICATION HISTORY:
-*
-* Ver    Who    Date    Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00a ecm  11/01/01 First release
-* 1.00a xd   11/03/04 Improved support for doxygen.
-* 
-* -******************************************************************************/ - -#ifndef XUTIL_H /* prevent circular inclusions */ -#define XUTIL_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ -#include "xbasic_types.h" -#include "xstatus.h" - -/************************** Constant Definitions *****************************/ - - -/**************************** Type Definitions *******************************/ - -/* xutil_memtest defines */ - -#define XUT_MEMTEST_INIT_VALUE 1 - -/** @name Memory subtests - * @{ - */ -/** - * See the detailed description of the subtests in the file description. - */ -#define XUT_ALLMEMTESTS 0 -#define XUT_INCREMENT 1 -#define XUT_WALKONES 2 -#define XUT_WALKZEROS 3 -#define XUT_INVERSEADDR 4 -#define XUT_FIXEDPATTERN 5 -#define XUT_MAXTEST XUT_FIXEDPATTERN -/* @} */ - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - -/* xutil_memtest prototypes */ - -int XUtil_MemoryTest32(u32 *Addr, u32 Words, u32 Pattern, u8 Subtest); -int XUtil_MemoryTest16(u16 *Addr, u32 Words, u16 Pattern, u8 Subtest); -int XUtil_MemoryTest8(u8 *Addr, u32 Words, u8 Pattern, u8 Subtest); - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/include/xversion.h b/software/LED_Controller_bsp/microblaze_mcs/include/xversion.h deleted file mode 100755 index 3a14716..0000000 --- a/software/LED_Controller_bsp/microblaze_mcs/include/xversion.h +++ /dev/null @@ -1,98 +0,0 @@ -/* $Id: xversion.h,v 1.9 2007/05/07 14:29:23 wre Exp $ */ -/****************************************************************************** -* -* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" -* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND -* SOLUTIONS FOR XILINX DEVICES. 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. -* -* (c) Copyright 2002 Xilinx Inc. -* All rights reserved. -* -******************************************************************************/ -/*****************************************************************************/ -/** -* @file xversion.h -* -* This file contains the interface for the XVersion component. This -* component represents a version ID. It is encapsulated within a component -* so that it's type and implementation can change without affecting users of -* it. -* -* The version is formatted as X.YYZ where X = 0 - 9, Y = 00 - 99, Z = a - z -* X is the major revision, YY is the minor revision, and Z is the -* compatability revision. -* -* Packed versions are also utilized for the configuration ROM such that -* memory is minimized. A packed version consumes only 16 bits and is -* formatted as follows. -* -*
-* Revision                  Range       Bit Positions
-*
-* Major Revision            0 - 9       Bits 15 - 12
-* Minor Revision            0 - 99      Bits 11 - 5
-* Compatability Revision    a - z       Bits 4 - 0
-*
-* MODIFICATION HISTORY:
-*
-* Ver   Who    Date   Changes
-* ----- ---- -------- -------------------------------------------------------
-* 1.00a xd   11/03/04 Improved support for doxygen.
-* 
-* -******************************************************************************/ - -#ifndef XVERSION_H /* prevent circular inclusions */ -#define XVERSION_H /* by using protection macros */ - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************** Include Files *********************************/ - -#include "xbasic_types.h" -#include "xstatus.h" - -/************************** Constant Definitions *****************************/ - - -/**************************** Type Definitions *******************************/ - -/* the following data type is used to hold a null terminated version string - * consisting of the following format, "X.YYX" - */ -typedef char XVersion[6]; - -/***************** Macros (Inline Functions) Definitions *********************/ - - -/************************** Function Prototypes ******************************/ - -void XVersion_UnPack(XVersion *InstancePtr, u16 PackedVersion); - -int XVersion_Pack(XVersion *InstancePtr, u16 *PackedVersion); - -int XVersion_IsEqual(XVersion *InstancePtr, XVersion *VersionPtr); - -void XVersion_ToString(XVersion *InstancePtr, char *StringPtr); - -int XVersion_FromString(XVersion *InstancePtr, char *StringPtr); - -void XVersion_Copy(XVersion *InstancePtr, XVersion *VersionPtr); - -#ifdef __cplusplus -} -#endif - -#endif /* end of protection macro */ diff --git a/software/LED_Controller_bsp/microblaze_mcs/lib/libc.a b/software/LED_Controller_bsp/microblaze_mcs/lib/libc.a deleted file mode 100644 index a4136fc1e37c5634deda43d74198902b307100fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1056170 zcmeFa3v`^-l_t8&RhDI=*kwrwC2>d*1QFoIr3XgNcsg>d5H+|NC3t9ct~;f2Rml>T zCACVjW!h;3R)_<>xej=UlXeo(7RE`ua&?JUA~K3w#D;hhCf6&lz{$87861!wH|>BM z

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 z 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